дано 48 монет среди них 1 монета фальшивая , но мы не знаем фальшивая монета больше или меньше весит. Надо за 4 взвешивания найти фальшивую монету. Весы для взвешивания чайные. много щитал только за 5 взвешиваний у меня выходит фальшивую монету найти. помогите
Это что, надо в Паскале реализовать?
нет не в паскале просто вычеслить и все математический
А сколько монет можно взвешивать за один раз?
М | Переношу в Математику. |
а что форум математики есть?
но эта задача както свезона с информатикой.
сколько хочешь но чтобы после 4 взвешиваний нашол 1 монету фальшиваю
ясно спасибо
В теории все вполне ясно. А вот как на практике методом Гарднера можно найти фальшивую монету, пусть даже из 40 монет?
Спасибо. Очень хочу посмотреть решение этой задачки. Вчера весь вечер над ней голову ломал )
program moneys;
var a,b:real;
c:integer;
begin
writeln('Задача: Дано "а" число монет, одна из них фальшивая '#10
'(фальшивая монета весит больше (меньше)) нужно узнать'#10
' за сколько взвешиваний "b" можно найти фальшивую монету,'#10
' или наоборот: найти кол-во монет, которое можно проверить'#10
' за "а" число взвешиваний'#10
' '#10
'Выберите тип задачи:'#10
'1 - Искать число монет.'#10
'2 - Искать число взвешиваний.'#10);
readln©;
case c of
1:begin
write(' Тип задачи: искать число монет.'#10
'----------------------------------'#10
'Введите число взвешиваний : ');read(b);
a:=(exp(b*ln(3))-1)/2;
writeln(' За ',b,' взвешиваний можно проверить ',a,' монет');
end;
2:begin
write(' Тип задачи: искать число взвешиваний .'#10
'----------------------------------'#10
'Введите число монет : ');read(a);
if a<>1 then
begin
b:=1;
while a*2+1>exp(b*ln(3)) do
begin
b:=b+1;
end;
writeln(a,' монет можно проверить за ',b,' взвешиваний. ');
end
else
writeln('Если имеется всего одна монета, то определить её подлинность нельзя.');
halt;
end;
else writeln(' Неправильно выбран тип задачи, нужно вводить 1 или 2');
end;
end.