题目内容:TicTacToe游戏–胜负判定
井字棋是一种在3×3格子上进行的连珠游戏,和五子棋比较类似,由于棋盘一般不画边框,格线排成井字故得名。
游戏规则:由分别代表O和X的两个游戏者轮流在格子里留下标记。由最先在任意一条直线上成功连接三个标记的一方获胜。(摘抄自百度百科)
读入一个3X3的二维数组,数组元素为’X’表示下X,元素为’O’表示下O,数组元素为’.’(英文符号“点”)表示未下棋,现编写程序进行当前胜负的判断,如果X方胜,则显示”X win!”,如果O方胜,则显示”O win!”,如果无人获胜,则显示”No one win!”。
输入格式:
读入一个3X3的二维数组,数组元素为’X’表示下X,元素为’O’表示下O,数组元素为’.’(英文符号“点”)表示未下棋。
输出格式:
若X方胜,则显示”X win!”;若O方胜,则显示”O win!”;若无人获胜,则显示”No one win!”。
输入样例1:
X . O
O X .
O . X
输出样例2:
X win!
输入样例2:
O . O
X X .
X . .
输出样例2:
No one win!
解决思路:
1、将”O” “X” “.”数字化,分别为”1” “-1” “0”,然后存入3行3列的整型数组a。
2、求数组a中”每一条直线“的合,然后依次存入数组b。
3、检测数组b。若有值等于3,说明存在”O”三连成线;若有值等于-3,说明存在”X”三连成线。
4、利用p,q分析数据并输出结果。
代码如下:
#includeint main(){int i,j,m[3][3],n[8],p=0,q=0;char a;for(i=0;i<3;i++){for(j=0;j<3;j++){a=getchar();switch(a){case 'O':m[i][j]=1;break;case 'X':m[i][j]=-1;break;case '.':m[i][j]=0;break;}}getchar();}n[0]=m[0][0]+m[0][1]+m[0][2];n[1]=m[1][0]+m[1][1]+m[1][2];n[2]=m[2][0]+m[2][1]+m[2][2];n[3]=m[0][0]+m[1][0]+m[2][0];n[4]=m[0][1]+m[1][1]+m[2][1];n[5]=m[0][2]+m[1][2]+m[2][2];n[6]=m[0][0]+m[1][1]+m[2][2];n[7]=m[0][2]+m[1][1]+m[2][0];for(i=0;i<8;i++){if(n[i] == 3) p++;else if(n[i] == -3) q++;}if(p == 0 && q != 0) printf("X win!");else if(p != 0 && q ==0) printf("O win!");else printf("No one win!");return 0;}