12 монет. Известен способ, как за три взвешивания на весах без гирь среди 12 монет найти фальшивую (отличающуюся от остальных по весу в неизвестную сторону). Для этого при каждом взвешивании на чаши весов нужно класть по 4 монеты. Реализовать такую идентификацию: человек загадывает номер фальшивой монеты и ее особенность (легче или тяжелее других). ЭВМ организует взвешивание, спрашивает, куда отклонилась стрелка весов при каждом опыте, и находит номер фальшивой монеты
volvo
21.02.2006 18:32
Ну, так ты же знаешь алгоритм... Проблема с реализацией? Насколько я понимаю, тройной If ... Then ... Else - вот и вся программа...
Что именно проблематично?
Zeratull
25.02.2006 12:39
Как раз с реализацией проблемы.
У меня она что-то слишком громоздкой получается. Переменных много.
Можете подсказать фрагмент основного кода реализации. А остальное надеюсь допишу.
volvo
25.02.2006 15:21
Цитата
У меня она что-то слишком громоздкой получается.
Вот и приведи то, что у тебя получается...
klem4
27.02.2006 1:04
А что является одним испытанием, когда замер происходит в момент нахождения монет и на правой чаше и на левой ?
Lapp
28.02.2006 9:19
Цитата(klem4 @ 26.02.2006 21:04)
А что является одним испытанием, когда замер происходит в момент нахождения монет и на правой чаше и на левой ?
Примерно так:
Входные данные (показываются программой на мониторе, три раза за игру): - На левой чашке: монеты 1, 2, 5, 12 - На правой: 3, 4, 8, 10 (циферки я написал от балды)
Возможные варианты ответов (игрок отвечает, исходя из того, что он задумал: номер фальшивой монеты и тяжелее она или легче) : - левая тяжелее - левая легче - одинаково
Алгоритм (который автор любезно опустил) весьма непростой. Прежде всего надо определиться с ним. Возможно также, что существует не один алгоритм. Поскольку задача размещена не в Математике, а в Задачах (на Паскале!), то нужно попросить автора темы выложить тут подробное описание алгоритма. И уже по нему делать прогу.. Верно?
volvo
28.02.2006 19:24
lapp, ты меня извини, но не надо раздувать из мухи слона!
Цитата
Алгоритм (который автор любезно опустил) весьма непростой
Уж куда там... 3 строчки - это уникальный просто по сложности алгоритм...
И,
Цитата
Поскольку задача размещена не в Математике, а в Задачах (на Паскале!)
, все дальнейшие рассуждения по поводу сложности алгоритма будут считаться флудом. Я тебя уже предупреждал, кажется? Есть, что сказать по теме - Yor Are Welcome, иначе, извини, I'll have to pull rank!
Lapp
28.02.2006 22:29
Цитата(volvo @ 28.02.2006 15:24)
lapp, ты меня извини, но не надо раздувать из мухи слона! Уж куда там... 3 строчки - это уникальный просто по сложности алгоритм...
Volvo, ты прав, сложность алгритма тут абсолютно ни при чем. Да и сам алгоритм тут тоже абсолютно ни при чем. По некотором размышлении набросал программу-рыбу. Строчки заполнить нужной информацией.. Конечно, она не оптимальная.. строки зря тратит.. Некоторые комбинации, видимо, не осуществляются (27 строк на 24 ответа).
uses
CRT;
const
cL='l';
cE='e';
cR='r';
type
tAnswer = (N,L,E,R);
var
i:integer;
c:char;
S:array[1..3,L..R,L..R]ofstring;
F:array[L..R,L..R,L..R]ofstring;
const
A:array[1..3]of tAnswer=(N,N,N);
begin
S[1,N,N]:='Left: , Right: . What is heavier?';
S[2,L,N]:='Left: , Right: . What is heavier?';
S[2,E,N]:='Left: , Right: . What is heavier?';
S[2,R,N]:='Left: , Right: . What is heavier?';
S[3,L,L]:='Left: , Right: . What is heavier?';
S[3,L,E]:='Left: , Right: . What is heavier?';
S[3,L,R]:='Left: , Right: . What is heavier?';
S[3,E,L]:='Left: , Right: . What is heavier?';
S[3,E,E]:='Left: , Right: . What is heavier?';
S[3,E,R]:='Left: , Right: . What is heavier?';
S[3,R,L]:='Left: , Right: . What is heavier?';
S[3,R,E]:='Left: , Right: . What is heavier?';
S[3,R,R]:='Left: , Right: . What is heavier?';
F[L,L,L]:='False coin is #.. It is ..';
F[L,L,E]:='False coin is #.. It is ..';
F[L,L,R]:='False coin is #.. It is ..';
F[L,E,L]:='False coin is #.. It is ..';
F[L,E,E]:='False coin is #.. It is ..';
F[L,E,R]:='False coin is #.. It is ..';
F[L,R,L]:='False coin is #.. It is ..';
F[L,R,E]:='False coin is #.. It is ..';
F[L,R,R]:='False coin is #.. It is ..';
F[E,L,L]:='False coin is #.. It is ..';
F[E,L,E]:='False coin is #.. It is ..';
F[E,L,R]:='False coin is #.. It is ..';
F[E,E,L]:='False coin is #.. It is ..';
F[E,E,E]:='False coin is #.. It is ..';
F[E,E,R]:='False coin is #.. It is ..';
F[E,R,L]:='False coin is #.. It is ..';
F[E,R,E]:='False coin is #.. It is ..';
F[E,R,R]:='False coin is #.. It is ..';
F[R,L,L]:='False coin is #.. It is ..';
F[R,L,E]:='False coin is #.. It is ..';
F[R,L,R]:='False coin is #.. It is ..';
F[R,E,L]:='False coin is #.. It is ..';
F[R,E,E]:='False coin is #.. It is ..';
F[R,E,R]:='False coin is #.. It is ..';
F[R,R,L]:='False coin is #.. It is ..';
F[R,R,E]:='False coin is #.. It is ..';
F[R,R,R]:='False coin is #.. It is ..';
for i:=1to3dobegin
WriteLn(S[i,A[1],A[2]]);
repeat
c:=ReadKey;
case c of
cL:A[i]:=L;
cE:A[i]:=E;
cR:A[i]:=R;
end;
until A[i] in [L,E,R];
end;
WriteLn(F[A[1],A[2],A[3]])
end.
Zeratull
3.03.2006 11:09
lapp огромное спасибо. попробую разобраться с прогой.