Камень ножницы бумага для трех игроков (язык Паскаль)

Прикладное программирование Программирование на Pascal Камень ножницы бумага для трех игроков (язык Паскаль)

Помечено: ,

  • В этой теме 0 ответов, 1 участник, последнее обновление 1 год, 2 месяца назад сделано Васильев Владимир Сергеевич.
Просмотр 0 веток ответов
  • Автор
    Сообщения
    • #5580
      @admin

      Камень, ножницы, бумага — популярная детская игра на руках, изобретенная в Китае и известная во многих странах мира.

      Игроки считают вслух «Камень … Ножницы … Бумага… Раз… Два… Три», одновременно качая кулаками. На счет «Три» они одновременно показывают при помощи пальцев один из трех знаков: камень, ножницы или бумагу.

      Победитель определяется по следующим правилам:

      • Камень побеждает ножницы («камень затупляет или ломает ножницы»)
      • Ножницы побеждают бумагу («ножницы разрезают бумагу»)
      • Бумага побеждает камень («бумага заворачивает камень»)
      • Если игроки показали одинаковый знак, то засчитывается ничья и игра переигрывается.

      В классическом варианте в игру играют вдвоем, однако возможна игра большего количества участников.

      При игре в «Камень, ножницы, бумага» втроем выигрывает игрок, победивший обоих своих соперников, если такого игрока нет, то засчитывается ничья.

      Задача: Напишите программу, определяющую кто выигрывает в игре для трех игроков.

      Формат входных данных: с клавиатуры вводятся три числа a,b,c (1<=a,b,c<=3) — информация о знаках, показанных первым, вторым и третьим игроком соответственно. Информация о знаке кодируется следующим образом 1 означает камень, 2 — ножницы, 3 — бумагу. Формат выходных данных: на экран вывести номер победившего игрока или 0 в случае ничьей. Пример входных и выходных данных:

      Ввод Вывод
      1
      2
      3
      0
      1
      1
      2
      0
      2
      1
      2
      2

      Решение

      Рассмотрим вигрышные ситуации: 122 212 221 или 233 323 332, или 311 131 113. Все остальные ситуации приводят к ничьей.

      Program OlimpTask1;
      Uses CRT;
      Type x_t=array [1..3] of integer;
      Var 
        x : x_t;
        i : integer;
        sum,v : integer;
      
      Procedure One(x:x_t;a,b:integer; var z:integer);
      {
        Процедура определения выигрышной ситуации.
        Перебор всех возможных вариантов.
        В переменную z записывается 1,
        если выигрышный вариант найден.
        Выводится номер выигрывшего игрока
      }
        Var i,j,s:integer;
        Begin
          for i:=1 to 3 do begin
          s:=0;
          if x[i]=a then
              for j:=1 to 3 do if x[j]=b then s:=s+1;
          if s=2 then begin writeln(i); z:=1; end;
        end;
      End;
      
      Begin
        ClrScr;
       
        {ввод данных}
        for i:=1 to 3 do 
          readln(x[i]);
        v:=0;
        
        {Перебор выигрышных ситуаций}
        One(x,1,2,sum); v:=v+sum;
        One(x,2,3,sum); v:=v+sum;
        One(x,3,1,sum); v:=v+sum;
        
        {Если выигрышных ситуаций не нашли, выводится 0}
        if v=0 then
          writeln(v);
        readln
      End.

Просмотр 0 веток ответов
  • Для ответа в этой теме необходимо авторизоваться.
×