М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
ryzhov67
ryzhov67
11.10.2020 07:00 •  Информатика

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

👇
Ответ:
saidos1000
saidos1000
11.10.2020

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.

4,4(15 оценок)
Ответ:
педро228
педро228
11.10.2020
Для решения этой задачи мы можем использовать метод динамического программирования. Мы создадим массив 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, что означает, что первый игрок выиграет при правильной игре.

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