|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.12.2010, 00:29 | #1 |
Новичок
Джуниор
Регистрация: 15.12.2010
Сообщений: 2
|
Игра Баше. Что-то уже написано. Нужно разобраться
На столе выложены n предметов. Играют двое. Они поочередно забирают несколько предметов, причем заранее договарено, что число забранных предметов не превышает k (0<k<=n). Проигрывает тот, кто своим ходом вынужден забрать последний предмет.
имеется выйгрышная тактика для игрока берущего предметы вторым. Чтобы найти ее, определяю, какие ситуации являются пройгрышными для игрока, делающего очередной ход. Такая ситуация является положение когда на столе остается й предмет, если число забираемых предметов не превышает k, то второй такой ситуацией является начие на столе 1+(k+1) предметов. сколько бы не взял предметов тот кто делает ход его соперник его соперник может свести ситуацию к одному оставшемуся предмету, поэтому пройгрышная ситуации характеризуются свойством: остаток от деления числа имеющихся предметов на (k+1), следовательно выйгрышная стратегия такая брать столько предметов, чтобы оставлять сопернику пройгрышную ситуацию. количество предметов в пройгрышной ситуации равно ближайшему меньшему чем m числу предмето кратному (k+1) увеличенному на 1. Это количество определяется (m div(k+1))*(k+1)+1 упрощенное правило - надо оставлять сопернику (m-1)div(k+1)*(k+1)+1 предметов div - целочисленное деление n - начальное количество предметов b - кол-во предметов, которое берет делающий очередной ход p - величина принимающая случайное значение 1 и 2 и опредающее участника игры делающего первый ход z - кол-во предметов, которое надо оставить, чтобы создать для соперника пройгрышную ситуацию *********************************** ****************************** Код:
Последний раз редактировалось Stilet; 16.12.2010 в 10:09. |
17.12.2010, 17:01 | #2 |
Новичок
Джуниор
Регистрация: 15.12.2010
Сообщений: 2
|
Вот новый вариант
#include <stdio.h>
#include <conio.h> #include <math.h> #include <time.h> #include <stdlib.h> #include <iostream> #include <windows.h> using namespace std; void main() { setlocale(LC_ALL,"rus"); system("color F1"); system("cls"); cout<<"\n\t\tИгра Баше\n"; int n,k,m,p,b; double z; b=0; srand(time(NULL)); n=rand()%10+1; n=n*3; cout<<"\n\tИсходное количество предметов "<<n; k=rand()%2+2; cout<<"\n\tМожно выбрать от 1 до "<<k; p=rand()%2+1; if (p==1) cout<<"\n\tНачинает компьютер "; else cout<<"\n\tНачинаете Вы "; m=n; do { if (p==1) { { b=rand()%k+1; m=m-b; p=0; if (m<=0) { cout<<"\n\tПоследний предмет взял компьютер, ВЫЙГРАЛИ ВЫ! "; break; } } cout<<"\n\tКомпьютер взял "<<b; cout<<"\n\tМожно выбрать от 1 до "<<k; } if (p!=1) { do { cout<<"\n\tСколько Вы берете?"; scanf("%d",&b); if (b<=0 || b>k || b>m){ cout<<"\n\tНеправильное значение"; b=0; if (m<=0) { cout<<"\n\tПоследний предмет взяли Вы, ВЫЙГРАЛ КОМПЬЮТЕР!"; break; } } } while (b<0 && b>k && b>m); } m=m-b; if (m<=0) { if (p==0) { cout<<"\n\tПоследний предмет взяли Вы, ВЫЙГРАЛ КОМПЬЮТЕР!"; } }else{ cout<<"\n\tОсталось предметов "<<m; if(p==1){p=2;} else{ p=1;} } }while(m!=0); getch(); } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
игра домино.код уже есть! помогите найти ошибку! | kitty_girl | Помощь студентам | 3 | 24.09.2014 12:02 |
Подскажите, что неверно написано?.. | katris | Помощь студентам | 0 | 25.10.2009 16:11 |
Помогите разобраться что нужно для создания браузерной игры | TYPIST | PHP | 7 | 22.06.2009 21:48 |
Помогите разобраться с задачей, уже в отчаянии (+) | Ink_90 | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 22.12.2008 16:42 |