原题链接:

  http://codeforces.com/problemset/problem/3/C

题意:

  题很简单,就是给你一个井字棋的一个棋局,让你判断一下(1)谁输谁赢(2)接下来谁下(3)棋局不符合要求(4)平局

  之所以写这个博客就是一位(3)的情况有些多;

  1 #include<cstdio>
  2 #include<iostream>
  3 #include<cstring>
  4 #include<cmath>
  5 #include<algorithm>
  6 
  7 using namespace std;
  8 
  9 int main()
 10 {
 11     char a[3][3];
 12     int i,j,cro=0,nou=0,fg1=0,fg2=0;
 13     for(i=0;i<3;i++)
 14     {
 15         for(j=0;j<3;j++)
 16         {
 17             scanf("%c",&a[i][j]);
 18             if(a[i][j]=='X')
 19                 cro++;
 20             if(a[i][j]=='0')
 21                 nou++;
 22         }
 23         getchar();
 24     }
 25     if(cro<nou||cro-nou>=2)  //先手的步数要么比后手多一步,要么相等;其他的都是非法的
 26         printf("illegal\n");
 27     else 
 28     {
 29         
 30         if(a[0][0]==a[1][0]&&a[1][0]==a[2][0]&&a[0][0]!='.')  //下面八个判断是判断那个玩家能三点一线 分别记录
 31         {
 32             if(a[0][0]=='X')
 33                 fg1=1;
 34             else
 35                 fg2=1;
 36         }
 37         if(a[0][1]==a[1][1]&&a[1][1]==a[2][1]&&a[0][1]!='.')
 38         {
 39             if(a[0][1]=='X')
 40                 fg1=1;
 41             else
 42                 fg2=1;
 43         }
 44         if(a[0][2]==a[1][2]&&a[1][2]==a[2][2]&&a[0][2]!='.')
 45         {
 46             if(a[0][2]=='X')
 47                 fg1=1;
 48             else
 49                 fg2=1;
 50         }
 51         if(a[0][0]==a[0][1]&a[0][1]==a[0][2]&&a[0][0]!='.')
 52         {
 53             if(a[0][0]=='X')
 54                 fg1=1;
 55             else
 56                 fg2=1;
 57         }
 58         if(a[1][0]==a[1][1]&a[1][1]==a[1][2]&&a[1][0]!='.')
 59         {
 60             if(a[1][0]=='X')
 61                 fg1=1;
 62             else
 63                 fg2=1;
 64         }
 65         if(a[2][0]==a[2][1]&a[2][1]==a[2][2]&&a[2][0]!='.')
 66         {
 67             if(a[2][0]=='X')
 68                 fg1=1;
 69             else
 70                 fg2=1;
 71         }
 72         if(a[0][0]==a[1][1]&&a[1][1]==a[2][2]&&a[0][0]!='.')
 73         {
 74             if(a[0][0]=='X')
 75                 fg1=1;
 76             else
 77                 fg2=1;
 78         }
 79         if(a[0][2]==a[1][1]&&a[1][1]==a[2][0]&&a[0][2]!='.')
 80         {
 81             if(a[0][2]=='X')
 82                 fg1=1;
 83             else
 84                 fg2=1;
 85         }
 86         if(fg1&&fg2)   //不能两个人都能三点一线,也就是说有一人三点一线 游戏就结束
 87         {
 88             printf("illegal\n");
 89         }
 90         else if(fg1&&!fg2)
 91         {
 92             if(cro==nou)
 93                 printf("illegal\n");
 94             else
 95                 printf("the first player won\n");
 96         }
 97         else if(fg2&&!fg1)
 98         {
 99             if(cro>nou)
100                 printf("illegal\n");
101             else
102                 printf("the second player won\n");
103         }
104         else if(!fg1&&!fg2)  //没有人三点一线
105         {
106             if(cro+nou==9)  //九个格子都用完了 平局
107                 printf("draw\n");
108             else        //棋没下完,判断接下来谁下
109             {
110                 if(cro>nou)
111                     printf("second\n");
112                 else if(cro==nou)
113                     printf("first\n");
114             }
115         }
116         
117     }
118 
119     return 0;
120 }

----------------欢迎指点评论------------------