Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 15:59   #1
makc56
 
Регистрация: 15.05.2012
Сообщений: 3
По умолчанию Реализация выигрышной стратегии для компьютера

Необходимо написать программную модель логической игры реализовав выигрышную стратегию для компьютера. Дано некоторое кол-во спичек (вводимых с клавиатуры), каждый игрок на своем ходе может убрать либо 1 либо 2 спички. Выигрывает тот кто берет последнюю.
Вот у меня есть программа, полностью подходит к условию, но в ней нет никакой стратегии для компьютера.

Код:
var 
InitialCount:integer;
Count: integer; 
Num: integer;  
Player: integer;
begin 
writeln ('Введите количество спичек');
readln(InitialCount);
Player := 1; 
Count := InitialCount; 
repeat 
if Player=1 then 
begin 
var Correct: boolean; 
repeat 
write('Ваш ход. На столе ',Count,' спичек. '); 
write('Сколько спичек Вы берете? '); 
readln(Num); 
Correct := (Num>=1) and (Num<=2) and (Num<=Count); 
if not Correct then 
writeln('Неверно! Повторите ввод!'); 
until Correct; 
end 
else 
begin 
Num := Random(1,2); 
if Num>Count then 
Num := Count; 
writeln('Компьютер взял ',Num,' спичек'); 
end; 
Count -= Num; 
if Player=1 then 
Player := 2 
else Player := 1; 
until Count=0; 

if Player=2 then 
writeln('Вы победили!') 
else writeln('Вы проиграли!'); 
end.
Заранее благодарен!



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 15.05.2012 в 16:57.
makc56 вне форума Ответить с цитированием
Старый 15.05.2012, 20:36   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Начать нужно с того, что описать эту стратегию словами.
s-andriano вне форума Ответить с цитированием
Старый 15.05.2012, 22:01   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Я бы посоветовал поискать стратегию в Инернете. Если известно сколько всего спичек и сколько могут брать игроки, то стратегия состоит в том, что бы вытаскивать такое кол-во спичек, что бы сумма этого количества спичек с количеством спичек, которые взял противник, была не более некоторого числа. Т.е. компьютер, например, для выигрыша, должен брать две или одну спичку, когда его противник берет одну или две, соответственно.


Тут так, без точных указаний, только мысль. Ищи в в сети точное решение.


Так думаю ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 15.05.2012, 22:07   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Да уж!
Куда катится мир?
Оказывается, нужно не решать задачу, а искать ее решение в И-нете!
s-andriano вне форума Ответить с цитированием
Старый 15.05.2012, 22:14   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Так искать предлагается стратегию, а не решение (программу)
Вероятно и самому можно до такого дойти, вот только времени будет потрачено куда как больше ...
Хотя, соглашусь, что в предложенной задаче найти самому эту стратегию не сложно.


Но как вариант - Интернет
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 15.05.2012, 22:24   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Эта "стратегия" записывается в одно арифметическое действие.
s-andriano вне форума Ответить с цитированием
Старый 16.05.2012, 12:21   #7
makc56
 
Регистрация: 15.05.2012
Сообщений: 3
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Эта "стратегия" записывается в одно арифметическое действие.
какое действие? Я уже голову сломал не могу понять принципа этой стратегии.
makc56 вне форума Ответить с цитированием
Старый 16.05.2012, 13:24   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

попытайтесь почитать дидактический (для начальной школы, судя по всему) материал, что такое выигрышная стратегия и как она составляется...

ссылки я давал ТУТ
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.05.2012, 21:49   #9
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Операция называется нахождение остатка деления.
Нужно брать количество спичек равное остатку от деления всего количества спичек на 3.
Код:
x := n mod 3;
Естественно, если у нас получается 0, то это - проигрышная позиция. Выигрышной стратегии из нее не существует.
s-andriano вне форума Ответить с цитированием
Старый 16.05.2012, 23:44   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Код:
x := n mod 3;
Естественно, если у нас получается 0, то это - проигрышная позиция. Выигрышной стратегии из нее не существует.
чуть-чуть дополню ответ.

я бы рекомендовал в таком случае на очередном ходе компьютера делать минимально возможный ход (в данном случае компьютер берёт одну спичку) и ждёт - не ошибётся ли противник (если на очередном шаге достигнута выигрышная позиция, то дальше уже по алгоритму компьютер будет делать только верные ходы (выигрышная формула указана).
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смешанные оптимальные стратегии L3zh1Y Помощь студентам 1 06.02.2012 19:43
ОС для старенького компьютера genrix Операционные системы общие вопросы 20 12.11.2011 15:55
движок для стратегии lamer69 Свободное общение 1 22.05.2011 01:16
Карта для стратегии sincemix Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 21.07.2010 23:54
реализация стратегии на классах mahsus Общие вопросы C/C++ 1 28.12.2007 10:27