Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 1 камень или 10 камней. Например, имея кучу из 7 камней, за один ход можно получить кучу из 8 или 17 камней. У каждого игрока, чтобы делать ходы, есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 41. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 41 или больше камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 40.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока — значит, описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника.
Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
#include <iostream>
using namespace std;
int main()
{
int sum = 0;
int composition = 1;
bool plusSeq = 1;
int n = 0;
cout << "Size array - ";
cin >> n;
int* a = new int[n];
for (int i = 0; i < n; i++)
{
a[i] = -10 + rand() % 21;
sum += a[i];
composition *= a[i];
cout << a[i] << " ";
}
for (int i = 0; i < n; i++)
{
if (a[i] < 0)
a[i] *= a[i];
}
for (int i = 1; i < n; i++)
{
if (a[i] < a[i - 1])
{
plusSeq = 0;
break;
}
}
if (plusSeq)
cout << "\nSum = " << sum;
else
cout << "\nComposition = " << composition;
delete[]a;
return 0;
}
Объяснение:
2. Немного изменим ваш код и получим искомое значение x
Искомое число х = 16293
var
x, y, a, b, k: integer;
begin
k:=10000;
repeat
x:=k;
a := 0; b := 0; y := 1;
while x > 0 do
begin
if (x mod 10) mod 2 = 0
then
a := a * 10 + x mod 10
else begin
y := y * 10;
b := b * 10 + x mod 10
end;
x := x div 10
end;
a := a * y + b;
k := k + 1;
until a = 26391;
writeln(a:8, k-1:8);
end.