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

Как решить эту задачу на pascal Напишите программу, которая по изображению поля для игры в «Крестики-нолики» определит, могла ли такая ситуация возникнуть в результате игры с соблюдением всех правил. Напомним, что игра в «Крестики-нолики» ведется на поле 3x3. Два игрока ходят по очереди. Первый ставит крестик, а второй – нолик. Ставить крестик и нолик разрешается в любую еще не занятую клетку поля. Когда один из игроков поставит три своих знака в одной горизонтали, вертикали или диагонали, или когда все клетки поля окажутся заняты, игра заканчивается. Входные данные Вводится три строки по три числа в каждой, описывающих игровое поле. Число 0 обозначает пустую клетку, 1 – крестик, 2 – нолик. Числа в строке разделяются пробелами. Выходные данные Требуется вывести слово YES, если указанная ситуация могла возникнуть в ходе игры, и NO в противном случае. Примеры Входные данные 1 1 1 1 1 1 1 1 1 Выходные данные NO Входные данные 2 1 1 1 1 2 2 2 1 Выходные данные YES Входные данные 1 1 1 2 0 2 0 0 0 Выходные данные YES Входные данные 0 0 0 0 1 0 0 0 0 Выходные данные YES Входные данные 1 1 1 2 2 2 0 0 0 Выходные данные NO
Гость
Ответ(ы) на вопрос:
Гость
var  a:array[1..3,1..3] of integer;  t:array[0..2] of boolean;  k:array[0..2] of integer;  i,j:integer;  res:boolean; begin  for i := 1 to 3 do  for j := 1 to 3 do    read(a[i,j]);  for i := 0 to 2 do   begin   k[i] := 0;   t[i] := false;   end;    for i := 1 to 3 do  for j := 1 to 3 do    k[a[i,j]] := k[a[i,j]] + 1;    for i := 1 to 3 do    begin    if (a[i,1] = a[i,2]) and (a[i,2] = a[i,3]) then      t[a[i,1]] := true;    if (a[1,i] = a[2,i]) and (a[2,i] = a[3,i]) then      t[a[1,i]] := true;    end;  if (a[1,1] = a[2,2]) and (a[2,2] = a[3,3]) then    t[a[2,2]] := true;  if (a[3,1] = a[2,2]) and (a[2,2] = a[1,3]) then    t[a[2,2]] := true;    res := true;    if (k[1] - k[2] > 1) or (k[1] - k[2] < 0) then    res := false;    if t[1] and ( t[2] or (k[1] = k[2]) ) then    res := false;    if res then    writeln('YES')  else    writeln('NO') end.
Не нашли ответ?
Ответить на вопрос
Похожие вопросы