Однажды два математика придумали математическую игру и решили в нее сыграть. Они попросили постороннего человека написать на разных листах бумаги два натуральных числа, причем одно должно быть больше другого ровно в 2 раза. Затем один математик взял один лист, а второй взял оставшийся. В чужие листы они не заглядывали и единственное, что знал каждый из них – на другом листе записано число либо в 2 раза большее, либо в 2 раза меньшее, чем у него. Затем началась игра. Игра заключается в том, что игроки по очереди отвечают на вопрос, знают ли они, какое число записано на листе соперника, до тех пор, пока один из них не сможет назвать это число. В процессе игры игроки всегда учитывают всю информацию, которую им дает ответ соперника, и говорят только правду.
Нужно вывести на каком ходе будет получен правильныей ответ. Ответ явно связан со степенью двойки "входящей в число". Пример числа 8 и 16 ответ 5. Числа 4 и 2 ответ 2.
то есть как?
они сидят:
-ты знаешь, какое у меня число?
-нет, а ты про мое?
-нет, а ты про мое?
....
или еще что-то?
У меня вот так получилось:
function check(a,b:integer):integer;
var i:integer;
begin
if (a xor b) and 1=1 then check:=1 {типа, а чего тут думать - и так все очевидно} else begin
i:=0;
while ((a and 1)=0) do begin
a:=a shr 1; inc (i);
b:=b+a; a:=b-a; b:=b-a;
end;
check:=i-1;
end;
end;
а если 8 и 16?
как-то пока не понимаю.
Ну здесь она находится, так как она с моего школьного олимпиадного программирования. А прога сделанная Malice, работает немного неправильно...
Гость, но вообще-то, если ты уж взялся утверждать, что ЧТО-ЛИБО работает неправильно, то будь добр не просто так трепать языком, а АРГУМЕНТИРОВАННО доказать, что это действительно работает не так, как ТЫ ДУМАЕШЬ, что должно работать.
упс, забыл подписатся в предпреведущем посте, сорри. Ну она(прога) работает напрвильно на примере 2,1 и некоторых других ответ выдает выдает на 1 меньше. Может и еще где-то работает неправильно...
А какой ответ должен быть в примере 2,1 ? Первым if-ом я отсек такие варианты, считая, что если одно из чисел нечетное, то и гадать незачем Если должно быть 2 (т.е. первый успеет сказать, что не знает), то можно исправить строку "then check:=1" на "then check:=1+byte(a>b)"