JZOJ 1713. 小x的游戏(game.pas/cpp)

【9.29NOIP普及模拟】小x的游戏(game.pas/cpp)
(File IO): input:game.in output:game.out
时间限制: 1000 ms  空间限制: 128000 KB  具体限制 Goto ProblemSet

题目描述

       Tac游戏在一个4*4的方格上进行。起先可能会在16个方格中出现一个标记‘T’,其余的方格是空着的。

       游戏有两个玩家,小x和小o。小x先开始,然后游戏轮流进行。每一步玩家可以将他的标记放入一个空的方格中。小x的标记是‘X’,小o的标记是‘O’。

       在一个玩家结束操作后,如果出现一行、一列或者对角线都是该玩家的标记,或者有3个该玩家的标记以及标记‘T’,那么他获得胜利,游戏结束,否则游戏继续,进入另一个玩家的回合。如果所有的方格都被填满,并且没人获得胜利,那么游戏结束,为平局。

       给出一个4*4的方格,包括‘X’,‘O’,‘T’和‘.’(‘.’表示空的方格),输出现在游戏的状态,游戏的状态包括:

       • “X won”(游戏结束,小x获胜)

       • “O won”(游戏结束,小o获胜)

       • “Draw”(游戏结束,平局)

       • “Game has not completed”(游戏还未结束)

       如果有空格,并且游戏还未结束,你应该打印 “Game has not completed”,即使最后的结果是一定的。

输入

第一行一个整数T,表示测试数据的组数。

每组测试数据包括4行,每行4个字符,如题所述。每组测试数据后会有一行空行。(0分和100分。。。)

输出

对于每组测试数据,输出“Case #x: y”,x表示第x组测试数据(组号从1开始),y即上述的状态之一。注意‘O’不是‘0’。

样例输入

6

XXXT

....

OO..

....

XOXT

XXOO

OXOX

XXOO

XOX.

OX..

....

....

OOXX

OXXX

OX.T

O..O

XXXO

..O.

.O..

T...

OXXX

XO..

..O.

...O

 

样例输出

Case #1: X won

Case #2: Draw

Case #3: Game has not completed

Case #4: O won

Case #5: O won

Case #6: O won

数据范围限制

对于50%的数据:1<=T<=10

对于100%的数据:1<=T<=110

简单的纯模拟,注意输入输出的格式即可

每读入一个字符,分别用几个数组记录该行该列(或者对角线,如果有的话)的该字符的个数

然后根据题意如果有一条边上有四个'X'or’O‘就输出谁赢了,否则直到最后输出平局或未结束

【total记录4*4-已经读入的以放的标记(.  除外),如果最后是还没填满棋盘,即total<>0,就是平局  ;否则就是未结束】

  1 {
  2     by @bobble !
  3                     2017-1-19
  4 }
  5 program game;
  6 const
  7   inf='game.in';
  8   outf='game.out';
  9 
 10 var
 11   a:array[1..4,1..4] of char;
 12   hang,lie:array[1..4,1..3] of longint;
 13   you,zuo:array[1..3] of longint;
 14   //1=X,2=O,3=T ; you=  zuo=/
 15   total,i,j,z,t:longint;
 16   boo:Boolean;
 17 
 18 procedure winner(apple:char);
 19 begin
 20 
 21   writeln(apple,' won');
 22   boo:=false;
 23 
 24 end;
 25 
 26 begin
 27   assign(input,inf);
 28   assign(output,outf);
 29   reset(input); rewrite(output);
 30 
 31   readln(t);
 32   for i:= 1 to t do
 33     begin
 34         fillchar(hang,sizeof(hang),0);
 35         fillchar(lie,sizeof(lie),0);
 36         fillchar(zuo,sizeof(zuo),0);
 37         fillchar(you,sizeof(you),0);
 38         boo:=true;  total:=16;
 39         write('Case #',i,': ');
 40         for j:= 1 to 4 do
 41         begin
 42            for z:= 1 to 4 do
 43            begin
 44                 read(a[j,z]);
 45                 if a[j,z]<>'.' then dec(total);
 46                  case a[j,z] of
 47                    'X':begin
 48                         inc(hang[j,1]);
 49                         inc(lie[z,1]);
 50                        if j=z then inc(you[1]);
 51                        if j+z=5 then inc(zuo[1]);
 52                        end;
 53                    'O':begin
 54                          inc(hang[j,2]);
 55                         inc(lie[z,2]);
 56                         if j=z then inc(you[2]);
 57                        if j+z=5 then inc(zuo[2]);
 58                        end;
 59                     'T':begin
 60                           inc(hang[j,3]);
 61                           inc(lie[z,3]);
 62                         if j=z then inc(you[3]);
 63                        if j+z=5 then inc(zuo[3]);
 64                        end
 65                   else continue;
 66                  end;
 67                if boo then
 68                begin
 69                   if (hang[j,1]=4) or (lie[z,1]=4) or (you[1]=4) or    (zuo[1]=4) then winner('X');
 70                   if boo then
 71                       if (hang[j,2]=4) or (lie[z,2]=4)
 72                       or (you[2]=4) or (zuo[2]=4) then winner('O');
 73               if (hang[j,3]=1)and (boo) then
 74               begin
 75                 if (hang[j,1]=3) then winner('X');
 76                 if (hang[j,2]=3) then winner('O');
 77               end;
 78                   if (lie[z,3]=1)and (boo) then
 79               begin
 80             if (lie[z,1]=3) then winner('X');
 81                 if (lie[z,2]=3) then winner('O');
 82               end;
 83                   if (you[3]=1)and (boo) then
 84               begin
 85                   if (you[1]=3) then winner('X');
 86               if (you[2]=3) then winner('O');
 87               end;
 88                   if (zuo[3]=1) and (boo) then
 89               begin
 90                   if (zuo[1]=3) then winner('X');
 91               if (zuo[2]=3) then winner('O');
 92               end;
 93                end;
 94             end;
 95            readln;
 96         end;
 97         if boo then
 98           if total=0 then writeln('Draw')
 99             else writeln('Game has not completed');
100        readln;
101     end;
102 
103   close(input);
104   close(output);
105 end.
原文地址:https://www.cnblogs.com/bobble/p/6308614.html