Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 6

Задача о кучках

09.04.2012, 19:11. Показов 1528. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех!!! Возникла необходимость решить задачу, но мои личные эксперименты завели меня в тупик!!
Вот сама задача: Две кучи камней: в первой 3, во второй 2 камня. Игроки ходят по очереди. Ход состоит в том, что игрок или удваивает число камней в какой-то куче, или добавляет 3 камня в какую-то кучу. Игрок, после хода которого общее число камней в двух кучах становится больше 22, проигрывает. Какой из игроков выигрывает при безошибочной игре обоих игроков? Каким должен быть первый ход выигрывающего игрока?

Помогите кто чем может) Благодарен буду до конца жизни!

ПС работаю в strawberry prolog
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.04.2012, 19:11
Ответы с готовыми решениями:

Задача о двух кучках камней
два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 1, а во второй - 2 камня. У каждого игрока...

Маленькая кучках глупых вопросов (отвечайте по проще, я еще ничего не знаю ;)
Вопрос номер 1. Как получить кол-во символов в строке (из эллемента EditBox)? Вопрос номер 2. Как выделить каждый символ (может в...

Олимпиадная задача по программированию. PascalABC.NET. Задача L. Переключение между окнами
Когда пользователь работает в операционной системе Winux, у него часто запущено несколько приложений. Каждое из приложений работает в...

10
 Аватар для aag
71 / 75 / 3
Регистрация: 03.11.2011
Сообщений: 136
09.04.2012, 21:32
Где-то уже было:
Дык максимальный путь и всё.
Получается 6 ходов максимум, то есть кто первый ходит по любому проигрывает.
А вот начало игры совсем не однозначное:
[[6,2],[9,2].....]
[[6,2],[6,4].....]
[[3,4],[6,4].....]
[[3,4],[3,7].....]
0
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 6
09.04.2012, 21:37  [ТС]
Ну я понимаю, что если рассматривать всевозможные варианты исхода событий, то максимум 6 ходов...НО как реализовать это в strawberry?!?!?! мне нужна помощь с кодом...
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
10.04.2012, 00:54
IloveGrymzik,
Кто проиграет можно так
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
?- lose(P,1,[3,2]),write(P).
 
swap(1,2).
swap(2,1).
 
lose(P,P,[A,B]):-A+B+3>22,!.
lose(P,P,[A,B]):-swap(P,P1),
    A1 is A*2,lose(P,P1,[A1,B]),
    B1 is B*2,lose(P,P1,[A,B1]),
    A2 is A+3,lose(P,P1,[A2,B]),
    B2 is B+3,lose(P,P1,[A,B2]),!.
lose(P1,P,_):-swap(P,P1).
А по поводу первого хода сами чего-нибудь попробуйте, у нас помогают тем, кто и сам что-то пытается сделать.
0
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 6
11.04.2012, 14:22  [ТС]
Спасибо!!
только вот я не пойму почему не используеться рекурсивный вызов...
У меня имеется немного переделанный вариант:



Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
swap(1,2).
swap(2,1).
 
 
lose(P,P,[A,B]):-A+B>22,!.
move([A,B],[A1,B]) :- A1 is A*2.
move([A,B],[A1,B]) :- A1 is A+3.
move([A,B],[A,B1]) :- B1 is B*2.
move([A,B],[A,B1]) :- B1 is B+3.
lose(P2,P,[A,B]):-swap(P2,P1),
move([A,B],[A1,B1]),
lose(P1,P,[A1,B1]).
 
 
?- lose(P,1,[3,2]),write(P).
Что думаешь?!?!?!Вроде правильно работает....я надеюсь
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
11.04.2012, 14:39
Рекурсивный вызов используется, lose в lose же вызывался. С move все правильно, а вот в первом правиле я ошиблась, надо так
Prolog
1
lose(Loser,P,[A,B]):-A+B+3>22,!,Loser=P.
И не надо менять A+B+3>22 на A+B>22. Именно проверяется, что если игрок, добавив даже минимальное число камней (3), получает больше 22, то он проиграл.
0
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 6
11.04.2012, 15:10  [ТС]
а можешь пояснить что неправильного было в первом правиле??!?!и как последующим ты исправила его?!??!
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
11.04.2012, 15:55
Потому что, когда у любого из игроков количество камней переваливает определенную границу, надо останавливаться. А в первом варианте было, что останавливается, только если у "подозреваемого в проигрыше" игрока перевалило. Ну например я проверяю является ли второй гарантированным лузером, если сейчас ходит первый и в кучках например 17 и 10.
?-lose(2,1,[17,10]).
И тогда в это правило
lose(P,P,[A,B]):-A+B+3>22,!.
программа просто не войдет, т.к первые параметры не равны, и отсечения не произойдет, а мне надо, чтобы оно произошло.
А это отсчение уже точно выполнится
lose(Loser,P,[A,B]):-A+B+3>22,!,Loser=P.

Добавлено через 21 минуту
Значит и во втором правиле такая же ошибка
И тогда правильно
Prolog
1
2
3
4
5
6
lose(Loser,P,[A,B]):-A+B+3>22,!,Loser=P.
lose(Loser,P,[A,B]):-swap(P,P1),
    A1 is A*2,lose(Loser,P1,[A1,B]),
    B1 is B*2,lose(Loser,P1,[A,B1]),
    A2 is A+3,lose(Loser,P1,[A2,B]),
    B2 is B+3,lose(Loser,P1,[A,B2]).
Но тогда выдается false, т.е нет такого игрока, который бы гарантированно проиграл.
1
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 6
16.04.2012, 16:28  [ТС]
а можешь помочь, что бы программа выводила история ходов?!?!??!
0
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 6
23.04.2012, 20:17  [ТС]
а можешь помочь, что бы программа выводила история ходов?!?!??!
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
23.04.2012, 20:45
Но ты же сам ничего не сделал, а я помогают таким только в случае сложный на мой взгляд задач. Данная к таким задачам не относится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.04.2012, 20:45
Помогаю со студенческими работами здесь

Васильев C# Глава 8 задача 2 (Просьба объяснить формулировку(задача внутри)
Текст задачи Написать программу , в которой есть класс с полем, являющимся ссылкой на одномерный целочисленный массив. У класса есть...

Васильев C# Глава 7 задача 8 (Просьба объяснить формулировку(задача внутри)
Текст задачи Напишите программу с классом, у которого есть текстовое поле. Значение текстовому полю присваивается при создании объекта...

В некотором государстве ввели компьютерный паспорт гражданина. Укажите пол гражданина и последовательность событий
Доброго времени суток,форумчане. Хотелось бы попросить помощи в решении одной задачи от умных голов. Задача: В некотором...

Считалка. Олимпиадная задача по программированию
Ирочка попросила маму придумать новую считалочку. Мама тут же ей "выдала". Пусть в кругу N человек. Это число N будем изменять...

Задача на k-тую цифру последовательности, задача на схему Горнера.
Ну, собственно опять прошу помощи... Задача 1: Определить k-тую цифру последовательности 1234567891011121314…, в которой выписаны подряд...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru