Сайт Льва Волкова
  
· Драгоценные камни аметисты и опалы имеют такую же химическую формулу, как и речной песок, а рубин имеет формулу белой глины.
 
      На главную  
 Личное
  Статьи
  Задачи 
 Ссылки
 АТ-531
www.levvol.ru    
 

Муниципальный этап Всероссийской олимпиады по информатике. Московская область. 29 ноября 2009 г.

Задача 1. Камень, ножницы, бумага.

Оценка 25 баллов.

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

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

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

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

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

Материал из Википедии — свободной энкиклопедии.

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

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

Формат входных данных

С клавиатуры вводятся три числа 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.



Скачать эту программу

Назад |  Задача 2 >>>