题解 | #井字棋#
井字棋
http://www.nowcoder.com/practice/0375c1d206ef48a3894f72aa07b2fdde
#include<stdio.h>
#define N 3
int main(void)
{
char qipan[N][N];
int d[N][N];//笨方法,用整数来代替字符来处理,以算和的方式来统计
int count=0;//用于统计每行每列是否都是相同元素
int xiejiao1=0;//用于统计斜角线上的情况
int xiejiao2=0;//用于统计反斜角线的情况
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
scanf("%c",&qipan[i][j]);//这里也可以不需要qipan数组,因为最后并不需要输出棋盘上的情况
getchar();//设置getchar用于吸收掉空格或者回车
if(qipan[i][j]=='K')//如果是K下的棋,则将相应的位置为1
d[i][j]=1;
else if(qipan[i][j]=='B')//如果是B下的棋,则将相应的位置为11
d[i][j]=11;
else//其他的置为0
d[i][j]=0;
}
}
for(int i=0;i<N;i++)//先按行扫描,顺便把斜角的也一起扫描了
{
for(int j=0;j<N;j++)
{
count+=d[i][j];//扫描行的情况
if(i==j)//顺带把斜角的情况也扫描了
xiejiao1+=d[i][j];
if(i+j==N-1)//把反斜角的情况给扫描了//这里纠正一下,可以换成N-1而不是固定死为2
xiejiao2+=d[i][j];
}
if(count==3||xiejiao1==3||xiejiao2==3)//K赢的情况
{
printf("KiKi wins!");
return 0;
}
if(count==33||xiejiao1==33||xiejiao2==33)//B赢的情况
{
printf("BoBo wins!");
return 0;
}
count=0;
}
for(int i=0;i<N;i++)//扫描列的情况
{
for(int j=0;j<N;j++)
{
count+=d[j][i];
}
if(count==3)
{
printf("KiKi wins!");
return 0;
}
if(count==33)
{
printf("BoBo wins!");
return 0;
}
count=0;
}
printf("No winner!");
return 0;
}