daryagulyaeva
?>

На столе лежат карточки с числами от 1 до 9. Двое играют в игру. За один ход берётся одна карточка. Выигрывает тот, у кого есть три карточки с общей суммой 15. Кто выигрывает при правильной игре?

Информатика

Ответы

mdclcompany

игра сводится к ничьей

Объяснение:

Рассмотрим различные комбинации получения числа 15:

9 + 5 + 19 + 4 + 28 + 6 + 18 + 5 + 28 + 4 + 37 + 6 + 27 + 5 + 36 + 5 + 4

Здесь представлены все возможные комбинации без учёта порядка следования. Когда игрок делает первый ход, у него есть как минимум две стратегии, по которым он может получить число 15 (это следует из того, что каждое число встречается хотя бы 2 раза). При этом однозначно стратегия определяется вторым ходом (всегда найдётся ровно одна комбинация, содержащая два определённых числа).

Если игрок 2 (II) будет пытаться мешать игроку 1 (I), это приведёт к ничьей: пусть I выбрал некоторое число. Тогда II может ограничить выбор I. После второго хода I II забирает число, необходимое для получения 15. Тогда I делает то же самое (так как стратегия II определилась), оба проиграли. Этот исход получается, если I будет мешать II.

Если II не будет мешать I (и наоборот), это так же приведёт к ничьей, но с другим исходом — оба выиграют.

denspiel

// PascalABC.NET 3.6.3

uses School;

function Divizors(n: integer): List<integer>;

begin

 var L := new List<integer>;

 L.Add(1);

 L.Add(n);

 if n > 3 then

   begin

   var k := 2;

   while (k * k <= n) and (k < 46341) do

   begin

     if n mod k = 0 then

     begin

       var t := n div k;

       L.Add(k);

       if k < t then L.Add(t)

       else break

     end;  

     Inc(k)

   end;

   L.Sort;

 end;

 Result := L

end;

begin

 // 1

 if ReadInteger.IsPrime then Println('YES')

 else Println('NO');

 // 2

 ReadInteger.Factorize.First.Println;

 // 3

 var a := Divizors(ReadInteger);

 Print(a.Count, a.Sum)

end.

sharaeva-is
// PascalABC.NET 3.3, сборка 1634 от 14.02.2018
// Внимание! Если программа не работает, обновите версию!

begin
  var fn:='MtFile.bin';
  var n:=ReadInteger;
  var f:file of integer;
  var s:=SeqRandom(n,-3000,8000); // последовательность не хранится
  Rewrite(f,fn);
  foreach var m in s do Write(f,m);
  f.Close; // файл создан и закрыт
  Reset(f,fn);
  var b:integer; // буфер
  while not Eof(f) do begin Read(f,b); Print(b) end; Writeln;
  Seek(f,0); // стали в начало файла
  Read(f,b);
  var iOdd:=0;
  while not Eof(f) and b.IsEven do
  begin Read(f,b); iOdd+=1 end;
  if Eof(f) and b.IsEven then
    begin Writeln('Нет нечетных компонентов'); exit end;
  var (bb,iEven):=(b,n);
  repeat
    iEven-=1; Seek(f,iEven); Read(f,b)
  until (iEven=1) or b.IsEven;
  if b.IsOdd then begin Writeln('Нет четных компонентов'); exit end;
  Seek(f,iEven); Write(f,bb);
  Seek(f,iOdd); Write(f,b);
  Seek(f,0);
  while not Eof(f) do begin Read(f,b); Print(b) end; Writeln;
  f.Close
end.

Пример
10
3166 6355 3596 6926 1266 6143 7401 7624 1402 -627
3166 1402 3596 6926 1266 6143 7401 7624 6355 -627

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

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

На столе лежат карточки с числами от 1 до 9. Двое играют в игру. За один ход берётся одна карточка. Выигрывает тот, у кого есть три карточки с общей суммой 15. Кто выигрывает при правильной игре?
Ваше имя (никнейм)*
Email*
Комментарий*

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

ivanrancev
saint158
mmoskow3
Kharkina1328
Бирюков Карпова1379
oldulo74
hbqhzwtd
Yelena_Yuliya1847
Sinelnikov1650
Ерохин
Zhilinoe134
Геннадьевич-Тимофеева158
Asira926
Yurevich1701
pavlova7771960