1два игрока, петя и ваня, играют в следующую игру. перед игроками лежат две кучи камней. игроки ходят по очереди, первый ход делает петя. за один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 38. победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, что в кучах всего будет 38 камней или больше. 1. для каждой из начальных позиций (7, 15), (9, 14) укажите, кто из игроков имеет выигрышную стратегию. в каждом случае опишите выигрышную стратегию; объясните, почему эта стратегия ведёт к выигрышу, и укажите, какое наибольшее количество ходов может потребоваться победителю для выигрыша при этой стратегии. 2. для каждой из начальных позиций (7, 14), (8,14), (9, 13) укажите, кто из игроков имеет выигрышную стратегию. 3. для начальной позиции (8,13) укажите, кто из игроков имеет выигрышную стратегию. постройте дерево всех партий, возможных при указанной вами выигрышной стратегии. представьте дерево в виде рисунка или таблицы.
Внимание! Этот код - не пример того, как нужно писать программы на С++, это лишь попытка адаптировать написанную на 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;
}
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;