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

Двое играют в следующую игру. из кучки спичек за один ход игрок вытягивает либо 1, либо 2, либо 1000 спичек. выигрывает тот, кто забирает последнюю спичку. кто выигрывает при правильной игре? входные данные вводится одно натуральное число — n ( 1≤ n ≤ 10000) начальное количество спичек в кучке. выходные данные выведите 1, если выигрывает первый игрок (тот, кто ходит первым), или 2, если выигрывает второй игрок. паскаль

Ответ:
Akbota0504
Akbota0504
03.05.2020 15:59

var  n:integer;

begin

read(n);

if (n=1) or (n=2) then writeln('1') else

        if n<=999 then

           if n mod 3 = 0 then writeln('2')

           else writeln('1')

           else if (n-1000) mod 3=0 then writeln('1')

           else writeln('2')

end.

var  n:integer;

begin

read(n);

if (n=1) or (n=2) then write('1') else                      

      if n<=999 then

           if n mod 3 = 0 then writeln('2')

           else writeln('1')

           else if (n-1000) mod 3=0 then write('1')

           else writeln('2')

end.

0,0(0 оценок)
Ответ:
corvet42
corvet42
12.01.2024 20:56
Для решения этой задачи мы можем использовать метод динамического программирования. Мы создадим массив dp[n+1], где n - это начальное количество спичек в кучке. Здесь dp[i] будет хранить результат игры для i спичек.

Теперь рассмотрим базовые случаи:
- Если кучка имеет 0 спичек, то первый игрок проигрывает. То есть dp[0] = 0.
- Если кучка имеет 1 или 2 спички, то первый игрок всегда выигрывает. То есть dp[1] = dp[2] = 1.

Затем мы можем заполнить остальные значения массива dp используя следующую формулу:

dp[i] = (dp[i-1] == 0 || dp[i-2] == 0 || dp[i-1000] == 0) ? 1 : 0

Это означает, что если первый игрок может выбрать такое количество спичек, чтобы в последующих ходах второй игрок проиграл (то есть dp[i-1], dp[i-2] или dp[i-1000] равно 0), то dp[i] будет равно 1, иначе dp[i] будет равно 0.

Наконец, ответом на задачу будет dp[n]. Если dp[n] равно 1, значит первый игрок выигрывает, иначе второй игрок выигрывает.

Вот полный код решения на языке Pascal:

```pascal
var
n: integer;
dp: array[0..10000] of integer;

function findWinner(n: integer): integer;
begin
dp[0] := 0;
dp[1] := 1;
dp[2] := 1;

for var i := 3 to n do
dp[i] := (dp[i-1] = 0) or (dp[i-2] = 0) or (dp[i-1000] = 0) ? 1 : 0;

Result := dp[n];
end;

begin
readln(n);
writeln(findWinner(n));
end.
```

Этот код принимает входные данные n, вызывает функцию findWinner и выводит результат на экран.

Например, если входными данными будет число 7, то результатом будет 1, что означает, что первый игрок выиграет при правильной игре.

Надеюсь, эта информация была полезной и понятной! Если у вас есть еще вопросы, не стесняйтесь задавать.
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?