Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите пожайлуста с задачей "Игра"
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
TroFF
Всем привет) Вот задачка...не могу решить и все((( Надеюсь на вашу помощь... просьба писать сразу в виде программы))

Двое играют в такую игру: первый записывает натуральное число от 2 до 9;второй умножает его на произвольное натуральное число от 2 до 9;затем первый умножает результат на любое из чисел от 2 до 9 и так далее. Выигрывает тот, кто первым получит результат равный или больший натурального числа N (N<2000000000). Кто выигрывает при правильной игре - начинающий или его соперник?
Программа должна:
Запросить N ; найти и сообщить кто выигрывает; если выигрывает первый то сообщить все его возможные первые ходы, ведущие к выигрышу.
Пример 1: Исходные данные: 16 Ответ: Выигрывает второй.
Пример 2: Исходные данные: 28 Ответ: Выигрывает первый. Выигрывающий ход: 2 или 3.
TroFF
ну кто нибудь помогите!!!!!!
мисс_граффити
да не поможет никто
ну не принято у нас за людей полностью все делать только потому, что они в последний момент вспомнили о задаче.
если бы ты хотя бы начал... выложил свои идеи...
Lodar'
Цитата(мисс_граффити @ 16.12.2007 22:47) *

да не поможет никто
ну не принято у нас за людей полностью все делать только потому, что они в последний момент вспомнили о задаче.
если бы ты хотя бы начал... выложил свои идеи...

там вроде нада делать цикл и выполнять его пока число не равно или больше N, при этом создав счетчик, потом узнать проверить на четность значение этого счетчика и узнаем кто выиграл. А вот ка просчитать выигрышные ходы?
Tan
Цитата
А вот ка просчитать выигрышные ходы?
То есть ход при котором игра останавливается ? Что тебе мешает после хода каждого игрока проверять образовавшееся число на условие? И судя по всему здесь надо будет работать с длинной арифметикой (по крайней мере 1 из вариантов).
Malice
По идее каждый должен руководствоваться правилом - надо выбрать такое максимально возможное число, после умножения на которое, соперник в любом случает не сможет победить. Пример: при N=28, ход = 2 или 3, т.к. 3 * любое [2..9] будет меньше 28, а при ходе = 4 соперник сможет получить больше.
Примерно вот так:
var b,t,h,n:longint;
begin
n:=28; b:=1; t:=1;
repeat
b:=3-b; h:=2;
while (t*(h+1)*9<n) and (h<9) do inc(h);
t:=t*h;
until t*9>=n;
writeln (b,' wins');
if b=1 then
for h:=2 to 9 do if h*9<n then write (h,' ');
end.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.