В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
7klassnik1
7klassnik1
03.05.2023 12:31 •  Информатика

1два игрока, петя и ваня, играют в следующую игру. перед игроками лежат две кучи камней. игроки ходят по очереди, первый ход делает петя. за один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 38. победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, что в кучах всего будет 38 камней или больше. 1. для каждой из начальных позиций (7, 15), (9, 14) укажите, кто из игроков имеет выигрышную стратегию. в каждом случае опишите выигрышную стратегию; объясните, почему эта стратегия ведёт к выигрышу, и укажите, какое наибольшее количество ходов может потребоваться победителю для выигрыша при этой стратегии. 2. для каждой из начальных позиций (7, 14), (8,14), (9, 13) укажите, кто из игроков имеет выигрышную стратегию. 3. для начальной позиции (8,13) укажите, кто из игроков имеет выигрышную стратегию. постройте дерево всех партий, возможных при указанной вами выигрышной стратегии. представьте дерево в виде рисунка или таблицы.

Показать ответ
Ответ:
яяя611
яяя611
12.12.2022 16:20

Внимание! Этот код - не пример того, как нужно писать программы на С++, это лишь попытка адаптировать написанную на Pascal программу на С++ с минимальными изменениями в логике кода, функциях и т.д.

В процессе возникла проблема с адаптацией type mat = array [1..5, 1..5] of real; Ближайший аналог -  typedef double mat[mm][mm]; , однако тогда возникают проблемы с передачей параметров в функцию.

Поэтому пришлось создавать класс с динамическим выделением памяти [обращаю на это внимание, не статический] и перегруженным оператором индексации.

#include <iostream>

const int mm = 5;

class mat

{

private:

double ** array;

public:

mat(): array(nullptr) {}

mat(double tmp[][mm])

{

 array = new double *[mm];

 for (auto i = 0; i < mm; i++)

 {

  array[i] = new double [mm];

 }

 for (auto i = 0; i < mm; i++)

 {

  for (auto j = 0; j < mm; j++)

  {

   array[i][j] = tmp[i][j];

  }

 }

}

~mat()

{

 for (auto i = 0; i < mm; i++)

 {

  delete[] array[i];

 }

 delete[] array;

}

double * operator[] (const int i)

{

 if (i < 0 || i >= mm)

 {

  throw std::runtime_error("Error! Invalid index!");

 }

 return array[i];

}

};

void pp1(mat& A, bool& p, int& imax, int& jmax)

{

imax = jmax = 0;

for (auto i = 0; i < mm; i++)

{

 for (auto j = 0; j < mm; j++)

 {

  if (A[i][j] > A[imax][jmax])

  {

   imax = i;

   jmax = j;

  }

 }

}

p = jmax > imax;

}

void pp2(mat& A)

{

double c;

for (auto i = 1; i < mm; i++)

{

 for (auto j = 0; j < i; j++)

 {

  c = A[i][j];

  A[i][j] = A[j][i];

  A[j][i] = c;

 }

}

}

void pp3(mat& A, int& imax, int& jmax, double& S)

{

S = 0;

for (auto i = 0; i < mm; i++)

{

 S += A[i][jmax] + A[imax][i];

}

}

int main()

{

double S;

int imax, jmax;

bool p;

double A1[mm][mm] = { {9, 1, 1, 2, 3}, {4, 6, 7, 8, 4}, {5, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 2, 1, 1 } };

mat A(A1);

std::cout << "isxodnaya matriza" << std::endl;

for (auto i = 0; i < mm; i++)

{

 for (auto j = 0; j < mm; j++)

 {

  std::cout << " " << A[i][j];

 }

 std::cout << std::endl;

}

pp1(A, p, imax, jmax);

std::cout << "MAX element: A[" << imax << "][" << jmax << "] = " << A[imax][jmax] << std::endl;

if (p)

{

 pp2(A);

 std::cout << "Transponirovannaya matrix" << std::endl;

 for (auto i = 0; i < mm; i++)

 {

  for (auto j = 0; j < mm; j++)

  {

   std::cout << " " << A[i][j];

  }

  std::cout << std::endl;

 }

}

else

{

 pp3(A, imax, jmax, S);

 std::cout << "Symma elementov s " << S << std::endl;

}

return 0;

}

0,0(0 оценок)
Ответ:
666Лиза66611
666Лиза66611
15.03.2022 22:12
Program lab3;const n=10;                   {количество элементов в массиве}
var   A:array [1..n] of real;          {объявление массива А}   i:byte;                                  {переменная для циклов}   b:boolean;                           {идентификатор роста}begin     writeln('vvedite tselie chisla matrici A[',n,',',n,']');     for i:=1 to n do begin                  {циклвводавмассив}         write('A[',i,'] = ');         readln(A[i]);     end;     writeln;     writeln('matraca imeet vid: ');     for i:=1 to n do begin                  {циклвыводамассива}         write(A[i]:3:3,'  ');        end;     writeln;     b := true;     for i:=1 to n-1 do               {цикл определения роста}          if (A[i] > A[i+1]) then begin  {если текущий больше следующего}             b := false;                                     {значит масив невозростающий}             break;          end;     if (b) then writeln('Masiv A - vozrostaushaya posledovatelnost''')     else writeln('Masiv A - ne vozrostaushaya posledovatelnost''');     readln;
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота