Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 3
Регистрация: 18.12.2014
Сообщений: 158
1

С3 игра в камни

20.12.2015, 21:59. Показов 747. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. У меня есть программа для задания: Два игрока играют в следующую игру. Перед ними лежат кучка камней [NZ] . У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или удваивает число камней в куче, или добавляет 2 камня в кучу. Выигрывает игрок, после хода которого общее число камней кучае становится не менее [MZ] камней. Кто выигрывает при безошибочной игре обоих игроков — игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока?

Написал программу, которая работает по следующей логике:
1) 1 игрок победит 1 ходом
Pascal
1
2
3
4
5
{1 xod pobedin +igr1}
function ys1a(const s, umn, slo, mz: integer): boolean;
begin
  ys1a := fumn(s, umn) >= mz
end;
2) 2 игрок победит 1 ходом
Pascal
1
2
3
4
5
{1 xod pobedin +igr2}
function ys1b(const s, umn, slo, mz: integer): boolean;
begin
  ys1b := (fumn(s, umn) < mz) and ((fumn(fslo(s, slo), umn) > mz))
end;
3) 2 ходом победит 1 игрок
Pascal
1
2
3
4
5
6
function ys2(const s, umn, slo, mz: integer): boolean;
begin
  ys2 := ((fumn(fslo(s, slo), umn) < mz) and (fumn(fslo(fslo(s, slo), slo), umn) >= mz))
  or
  ((fumn(fumn(s, umn), umn) < mz) and (fumn(fslo(fumn(s, umn), slo), umn) >= mz))
end;
4) 1 или 2 ходом победит 2 игрок
Pascal
1
2
3
4
5
6
function ys3(const s, umn, slo, mz: integer): boolean;
begin
  ys3 := ((fumn(fslo(fslo(s, slo), slo), umn) < mz) and (fumn(fslo(fslo(fslo(s, slo), slo), slo), umn) >= mz))
  or
  ((fumn(fslo(fumn(s, umn), slo), umn) < mz) and (fumn(fslo(fslo(fumn(s, umn), slo), slo), umn) >= mz))
end;

Вот сама программа:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
const
  igr1 = 'Петя';
  igr2 = 'Ваня';
 
var
  s: integer;
 
function fumn(s, umn: integer): integer;
begin
  fumn := s * umn;
end;
 
function fslo(s, slo: integer): integer;
begin
  fslo := s + slo;
end;
{1 xod pobedin +igr1}
function ys1a(const s, umn, slo, mz: integer): boolean;
begin
  ys1a := fumn(s, umn) >= mz
end;
 
{1 xod pobedin +igr2}
function ys1b(const s, umn, slo, mz: integer): boolean;
begin
  ys1b := (fumn(s, umn) < mz) and ((fumn(fslo(s, slo), umn) > mz))
end;
 
{2 xod pobedin +igr1}
function ys2(const s, umn, slo, mz: integer): boolean;
begin
  ys2 := ((fumn(fslo(s, slo), umn) < mz) and (fumn(fslo(fslo(s, slo), slo), umn) >= mz))
  or
  ((fumn(fumn(s, umn), umn) < mz) and (fumn(fslo(fumn(s, umn), slo), umn) >= mz))
end;
 
 
   {1 или 2 ходом победит 2 игрок}
function ys3(const s, umn, slo, mz: integer): boolean;
begin
  ys3 := ((fumn(fslo(fslo(s, slo), slo), umn) < mz) and (fumn(fslo(fslo(fslo(s, slo), slo), slo), umn) >= mz))
  or
  ((fumn(fslo(fumn(s, umn), slo), umn) < mz) and (fumn(fslo(fslo(fumn(s, umn), slo), slo), umn) >= mz))
end;
 
var
  mz, nz,nz2, umn, slo: integer;
 
begin
  write('Начальное значение: ');
  readln(nz);
  readln(nz2);
  write('Максимально значение: ');
  readln(mz);
  write('Прибавить: ');
  readln(umn);
  write('Умножить: ');
  readln(slo);
  
  {min}
  for s := (nz+nz2) to mz - 1 do
    if ys1a(s, umn, slo, mz) then 
    begin
      writeln('1 xod pobedit ' + igr1 + ' if s>= ', s);
      break
    end;
  {all}
  for s := (nz+nz2) to mz - 1 do
    if ys1b(s, umn, slo, mz) then
      writeln('1 xod pobedit ' + igr2 + ' if s= ', s);
  
  for s := (nz+nz2) to mz - 1 do
    if ys2(s, umn, slo, mz) then
      writeln('2 xod pobedit ' + igr1 + ' if s= ', s);
  
  for s := (nz+nz2) to mz - 1 do
    if ys3(s, umn, slo, mz) then
      writeln('1 xod pobedit ' + igr2 + ' if s= ', s);
  
end.
Суть моей проблемы: Что нужно подредактировать в коде, чтобы он работал для 2 кучек. То есть у меня есть 2 начальных значения (x;y) и для каждой кучки я могу выполнить сложение и умножение. И если первая кучка + вторая кучка больше максимального значения, то игрок выиграл.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2015, 21:59
Ответы с готовыми решениями:

Игра в камни
Есть кучка из n камней. Два игрока играют в игру. Первый игрок на своем ходу может взять либо a1,...

Игра в камни
Помогите пожалуйста решить задачу: На столе лежат N камней. За ход игрок может взять 1 или 2...

Игра «Камни»
1. Игра с компьютером. Предусмотреть два уровня – компьютер знает стратегию, компьютер не знает...

Задача про камни
У нас имеется N камней с весами w1, w2, w3,…, wn. Написать программу, которая распределит эти камни...

0
20.12.2015, 21:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2015, 21:59
Помогаю со студенческими работами здесь

Горячие АМД камни
Сделал сегодня генеральную уборку своего компьютера, включая замену термопасты на ЦП AMD Phenom II...

PHP и подводные камни
Здравствуйте! Я новичок в PHP, знаю только синтаксис языка и ряд функций. Нет продолжительного...

Задача про камни
Привет! Не могу понять с чего начинать копать..., помогите пожалуйста Дано: N камней различного...

Usermanager и подводные камни
И так вы встретелись с проблемой редактирование БД (user-manager/sqldb). Сама базаданных...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru