Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > методы проверки или иные способы


Автор: Swit 28.10.2005, 11:50
Игрок кот. берет последние конфеты, съедает все свои конфеты, а проигравший свои конфеты возвращает обратно в коробку

входные данные:

количество конфет N (1<=N<=100)

максимальное кол-во конфет кот. может взять за один ход каждый игрок M (1<=M<=100, M<=N)

выходные данные:

В выходной файл следует вывести единственное число - максимальное кол-во конфет, которое может съесть игрок который начал достовать конфеты первым.

т.е. смысл такой. Я ввожу значения общего кол-ва конфет к примеру 13 и по две конфеты на рыло. в итоге у первого игрока который начал брать первым и вытащил последнюю конфету в желудке оказывается 7 конфет. Но как организовать это программно при вводе различных значений ведь первый игрок может последние конфеты и не забрать и в итоге получает 0. к примеру значения 12 и 3 в итоге второй забирает последние 3 конфеты а первый остается нисчем.

Вобщем подскажите методы проверки или иные способы.

Автор: _hunter 28.10.2005, 12:14
проверки чего? чтобы при 3-х доступных конфетах и 2-х разрешенных нельзя было забрать больше, чем разрешено?
тогда так: if ( hochy_zabrat > mozno_zabrat ) hochy_zabrat = mozno_zabrat;

Автор: Swit 28.10.2005, 14:42
_hunter На всякий случай приведу саму задачу.


Двум братьям Саньку и Вовану принесли коробку с конфетами. Чтобы поделить конфеты между собой они придумали игру, суть которой сводится к следующему. Игроки поочередно берут себе из коробки некоторое (ненулевое) количество конфет. Это кол-во не должно превышать некоторого предельного числа. Игрок, кот. берет последние конфеты, съедает все свои конфеты, а проигравший свои конф. возвращает обратно в коробку. После этого игра продолжается и первым "ходит" игрок, оставшийся голодным после предыдущего раунда. Игра продолжается до тех пор, пока в коробке не останется ни одной конфеты . Цель игры -съесть как можно больше конфет.
Моя задача определить какое максимальное кол-во конфет может оказаться в животе у Санька, если он начинает первым и оба брата придерживаются оптимальной для себя стратегии.

Входные данные и выходные описаны выше.

Пример как должно быть при вводе общего 5 и максимального 2:

input.txt output.txt
5 2 3

Добавлено @ 14:48
тройка немного сместилась короче она под output.txt

Автор: _hunter 28.10.2005, 15:06
т.е. ты хочеш чтобы тебе программу написали? тогда ты не в тот раздел зашел -- нужно в раздел помощи...

Автор: Swit 28.10.2005, 15:20
_hunter Вот блин ругатся хочется. Хотел в P/S написать что я не прошу решения но не написал и получил от тебя эти слова "ты хочеш чтобы тебе программу написали? тогда ты не в тот раздел зашел -- нужно в раздел помощи"

Уверяю тебя мне твое решение не нужно я и сам в состоянии это сделать. Просто я хочу понять сам алгоритм как моя прога дожна работать.

Автор: _hunter 28.10.2005, 15:36
раздели процесс на ходы и на игры. я, например, так и не понял в каком случае игрок считается проигравшим и кто будет последним брать. тот, кто не первым?

Автор: Swit 28.10.2005, 17:39
Из вышеописанного условия задачи мне представляется это в таком виде:
Первым всегда будет брать конфеты Санек.
Вводим значения (общее кол-во конфет в коробке - 10) и ( по скольку можно брать, по 2)

1) итак из этих 10 первым берет 2 Санек остается 8;

2) далее из этих 8 две берет Вован остается 6;

3) опять берет Саня от этих 6 остается 4;

4) берет Вован от 4 остается 2;

5) и последние две конфеты забирает Саня значит он жрет все свои конфеты которые насабирал, т.е. в output.txt будет записано значение 6.


Или такой пример:

общее кол-во - 15;
можно взять - 4;

1) опять берет Саня 15-4=11;
2) Вова 11-4=7;
3) Саня 7-4=3;
4) и последние 3 забирает Вован в итоге в выходной файл output.txt будет записано значение 0 т.к. по условию Саня должен положить конфеты обратно в коробку т.к. он вытащил конфеты не последним.

Но примеров может быть большое кол-во так как в условии оговорено что Начальное кол-во конфет в коробке можно задать N (1<=N<=100) а максимальное кол-во конфет кот. можно взять M (1<=M<=100, M<=N)

Ты можешь спросить почему это Вован забрал последние 3 конфеты если по правилу брать можно только по 4. Опять же в условии это не оговарено, так что я это понял так: если остаток в коробке < чем положено забирать, то забирает тот чья очередь.

Еще ты конечно можешь сказать или подумать конечно что это не задача а какае-то х...ня. СОГЛАСЕН. Не я ее придумал. Моя проблема в том чтобы ее решить.






Автор: _hunter 28.10.2005, 17:58
простейший вариант -- использовать рекурсию
пишеш функцию, которая принимает число конфет, сколько берем, кто берет
и вызываеш ее в цикле от 0 до сколько_можно_брать и третьим пареметром передаеш 1
в функции отнимаеш от общего числа переданное ( и эту разницу передаеш дальше ) опять в цикле вызываеш сам себя и передаеш уже -1 ( т.е. просто в функции третий параметр множиш на -1 )
и так далее... пока доступных конфет не станет 0. после этого возвращаеш третий параметр и по ниму судиш кто выиграл

Автор: Swit 28.10.2005, 18:07
Понятно, буду пробовать, спасибо за совет!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)