bugaevnicky
?>

50 ! 1. на столе лежат 25 спичек. играют двое. игроки по очереди могут взять от одной до четырех спичек. кто не может сделать ход (т.к. спичек не осталось), проигрывает. другими словами, выигрывает взявший последнюю спичку. выясните, у кого из игроков есть выигрышная стратегия. 2. выясните, у кого из игроков есть выигрышная стратегия в такой игре: начальная позиция – на столе лежит 107 спичек, за один ход можно брать 1 или 2 спички. выигрывает тот, кто взял последнюю спичку.

Информатика

Ответы

belegaj98
У этих игр очень простая стратегия. Запомните её один раз и будете решать любые подобные задачи.

Пусть дано P предметов и за ход можно брать от 1 до n предметов.
Вычисляем "магическое число" М = n+1.
Находим остаток целочисленного деления P на M - он покажет, сколько спичек надо взять при первом ходе для выигрыша. Если 0 - то игрок, делающий ход первым, проигрывает. Выигрышная стратегия проста. Если противник взял k предметов, мы берем M-k.

Рассмотрим задачу 1.
P=25, n=4
М=n+1=5, P/M дает в остатке 0 - игрок, делающий ход первым, проигрывает.
Выигрышная стратегия: брать 5-k предметов, оставляя противнику 20, 15, 10 и 5 предметов.

Рассмотрим задачу 2.
P=107, n=2
M=n+1=3, P/M дает в остатке 2 - игрок, делающий ход первым, берет 2 предмета и выигрывает.
Выигрышная стратегия: брать 3-k предметов, оставляя противнику 105, 102, 99, 96, ... предметов.
d111180
На Паскале:

program Program1;
var i, j, n, k: integer;
var result: real;
var array1: array [1..255] of real;
begin
     result := 0;
     write('Введите значение N (не более 255): ');
     readln(n);
     for i := 1 to n do
         begin
          write('Введите значение ', i, ' элемента массива: ');
          readln(array1[i]);
         end;
         begin
          writeln('Массив, размером - ', n, ' элементов(а):');
          for i := 1 to n do write(array1[i], ' ');
          writeln;
         end;
     for i:=1 to n do
         begin
          k := 0;
          for j:=1 to n do
          if array1[i] = array1[j] then k := k + 1;
          if k = 1 then result := result + array1[i];
         end;
     writeln('Сумма уникальных элементов массива = ', result);
end.
info2

ты делал сравнение a с b. у тебя вышло такое: a не равно b.

во втором условии у тебя вообще не условие, это действие, ты a / 2. Чтоб проверить кратность числа нужно написать это: число % кратно_какому_числу == 0.

при print ты не сделал табуляцию. Перед print надо нажать tab.  Еще ты в print вместо того чтоб написать просто сумму сделал проверку на равность a и a + b (это в случае с первым print). Нужно было написать просто print(a + b) и print(a * b)

Вот готовый код:

a = int(input("Введите a: "))

b = int(input("Введите b: "))

if a != 10 and b != 10 and a % 2 == 0:

   print(a + b)

else:

   print(a * b)

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

50 ! 1. на столе лежат 25 спичек. играют двое. игроки по очереди могут взять от одной до четырех спичек. кто не может сделать ход (т.к. спичек не осталось), проигрывает. другими словами, выигрывает взявший последнюю спичку. выясните, у кого из игроков есть выигрышная стратегия. 2. выясните, у кого из игроков есть выигрышная стратегия в такой игре: начальная позиция – на столе лежит 107 спичек, за один ход можно брать 1 или 2 спички. выигрывает тот, кто взял последнюю спичку.
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

belka1976
printdecor
efimov33
simplexsol
ynikolaev2657
hvostna23
maxchemaxim14
vera4
akbmaslafarkop3175
vardartem876
eduard495
opel81
Vladmouse32506
rstas
rosik76