Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит
куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход
игрок может
а) добавить в кучу один камень;
б) увеличить количество камней в куче в два раза.
Игра завершается в тот момент, когда количество камней в куче становится
не менее 25. Если при этом в куче оказалось не более 45 камней, то
победителем считается игрок, сделавший последний ход. В противном
случае победителем становится его противник. В начальный момент в куче
было S камней, 1 ≤ S ≤ 24.
ответьте на следующие вопросы:
Вопрос 1. Известно, что Ваня выиграл своим первым ходом после первого
хода Пети. Назовите минимальное значение S, при котором это возможно.
Вопрос 2. Определите, два таких значения S, при которых у Пети есть
выигрышная стратегия, причём одновременно выполняются два условия:
— Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет
ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.
Вопрос 3. Найдите значение S, при которых одновременно выполняются
два условия:
— у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или
вторым ходом при любой игре Пети;
— у Вани нет стратегии, которая позволит ему гарантированно выиграть
первым ходом.
program raf105;
var a:array[1..3] of integer;
abc,i:integer;
begin
write('Введите число меньше тысячи: ');
readln(abc);
a[1]:=1000;
a[2]:=1000;
a[3]:=1000;
while abc<>0 do
begin
i:= i+1;
a[i]:= abc mod 10;
abc:= (abc-a[i]) div 10;
end;
if (a[1]<>a[2]) and (a[1]<>a[3]) and (a[1]<>1000)
then abc:= abc+1;
if (a[2]<>a[1]) and (a[2]<>a[3]) and (a[2]<>1000)
then abc:= abc+1;
if (a[3]<>a[1]) and (a[3]<>a[2]) and (a[3]<>1000)
then abc:= abc+1;
if abc=3 then abc:= abc-1;
writeln('Количество разных цифр: ',abc+1);
end.
Программа написана на языке PascalABC.NET
var
A : array [1..999, 1..999] of Integer;
p, s, i, j, m, n: Integer;
begin
// Инициализация переменных для суммы и произведения
s:= 0;
p:= 1;
Write('Введите количество строк - ');
ReadLn(m);
Write('Введите количество столбцов - ');
ReadLn(n);
// Заполнение
for i:=1 to m do
for j:=1 to n do
A[i,j]:=Random(6)+5;
// Вывод массива
for i:=1 to m do
begin
for j:=1 to n do
Write(A[i,j]:3);
WriteLn();
end;
// Подсчёт произведения и суммы
for i:= 1 to m do
begin
j:= i;
s+= A[m-i+1,j];
p*= A[i,j];
end;
WriteLn('Произведение = ', p);
WriteLn('Сумма = ', s);
end.