IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задачка про игру, логика
-Ромка-
сообщение 11.04.2006 13:35
Сообщение #1


Гость






Однажды два математика придумали математическую игру и решили в нее сыграть. Они попросили постороннего человека написать на разных листах бумаги два натуральных числа, причем одно должно быть больше другого ровно в 2 раза. Затем один математик взял один лист, а второй взял оставшийся. В чужие листы они не заглядывали и единственное, что знал каждый из них – на другом листе записано число либо в 2 раза большее, либо в 2 раза меньшее, чем у него. Затем началась игра. Игра заключается в том, что игроки по очереди отвечают на вопрос, знают ли они, какое число записано на листе соперника, до тех пор, пока один из них не сможет назвать это число. В процессе игры игроки всегда учитывают всю информацию, которую им дает ответ соперника, и говорят только правду.

Нужно вывести на каком ходе будет получен правильныей ответ. Ответ явно связан со степенью двойки "входящей в число". Пример числа 8 и 16 ответ 5. Числа 4 и 2 ответ 2.
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 11.04.2006 19:40
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


то есть как?
они сидят:
-ты знаешь, какое у меня число?
-нет, а ты про мое?
-нет, а ты про мое?
....
или еще что-то?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Романтик
сообщение 11.04.2006 20:17
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 159
Пол: Мужской
Реальное имя: Anton

Репутация: -  0  +


Цитата(-Ромка- @ 11.04.2006 14:35) *

Нужно вывести на каком ходе будет получен правильныей ответ. Ответ явно связан со степенью двойки "входящей в число". ????Пример числа 8 и 16 ответ 5. Числа 4 и 2 ответ 2.????

Нужны комментарии.
p.S опоздал с вопросом. smile.gif

Сообщение отредактировано: Романтик - 11.04.2006 20:18


--------------------
made in USSR.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-Ромка-
сообщение 11.04.2006 21:16
Сообщение #4


Гость






Цитата
то есть как?
они сидят:
-ты знаешь, какое у меня число?
-нет, а ты про мое?
-нет, а ты про мое?

Да. Например, 4 и 2 -первый сразу не знает. Второй думает: "У 1-го может быть 1 или 4. Но если у него 1, то он сразу сказал бы "знаю", так как у меня не может быть 1/2. => у него 4". Т.е. игра -
1-й. Я не знаю (1 ход)
2-й. Я знаю - 2 (2 ход)
 К началу страницы 
+ Ответить 
Malice
сообщение 11.04.2006 21:44
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


У меня вот так получилось:
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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 11.04.2006 22:36
Сообщение #6


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


а если 8 и 16?
как-то пока не понимаю.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.04.2006 6:57
Сообщение #7


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(мисс_граффити @ 11.04.2006 22:36) *

а если 8 и 16?

Здесь уже разобрали случай с 2 и 4. В этом случае игрок с 2 догадался на втором ходу.
Теперь рассмотрим случай с 4 и 8. После двух ходов игрок с 4 думает: "У него может быть либо 2, либо 8. Но если бы у него было 2, то он бы догадался на втором ходу, так как это был бы случай 2 и 4, который уже разобран. Раз он не догадался, значит, это не есть случай 2 и 4. Тогда это случай 4 и 8, и у него - 8".
Таким образом, в случае 4 и 8 игрок с 4 догадывается на 3-ем ходу.

Далее - рекурсия. В случае 8 и 16 игрок с 8 догадается на 4-ом ходу, так как он будет ссылаться на альтернативный случай 4 и 8, который должен быть решен на 3-ем ходу. И так далее..

Строго говоря, это не игра в изначальном смысле этого слова. Ибо в ней нет выигравших и проигравших. Игрок с меньшим числом должен догадываться на ходу порядка Log2(n). При этом предполагается, что они оба предельно умные и никогда не ошибаются. Если произойдет ошибка - "игра" и вовсе утрачивает смысл. По-моему, тут таится какое-то противоречие, парадокс, который никто пока не сформулировал, насколько мне известно.

Это головоломка на рекурсивное мышление, похожая на мудрецов с колпаками. Что она делает в этом разделе - ума не приложу. Она скорее для раздела Математика..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 12.04.2006 16:03
Сообщение #8


Гость






Ну здесь она находится, так как она с моего школьного олимпиадного программирования. А прога сделанная Malice, работает немного неправильно...
 К началу страницы 
+ Ответить 
volvo
сообщение 12.04.2006 18:27
Сообщение #9


Гость






Гость, но вообще-то, если ты уж взялся утверждать, что ЧТО-ЛИБО работает неправильно, то будь добр не просто так трепать языком, а АРГУМЕНТИРОВАННО доказать, что это действительно работает не так, как ТЫ ДУМАЕШЬ, что должно работать.
 К началу страницы 
+ Ответить 
-Ромка-
сообщение 12.04.2006 19:56
Сообщение #10


Гость






упс, забыл подписатся в предпреведущем посте, сорри. Ну она(прога) работает напрвильно на примере 2,1 и некоторых других ответ выдает выдает на 1 меньше. Может и еще где-то работает неправильно...
 К началу страницы 
+ Ответить 
Malice
сообщение 12.04.2006 21:05
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


А какой ответ должен быть в примере 2,1 ? Первым if-ом я отсек такие варианты, считая, что если одно из чисел нечетное, то и гадать незачем smile.gif Если должно быть 2 (т.е. первый успеет сказать, что не знает), то можно исправить строку "then check:=1" на "then check:=1+byte(a>b)" yes2.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.06.2025 14:50
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"