井字棋
#include<iostream>
using namespace std;
int main()
{
int sum1,sum2,sum3,sum4,sum5,sum6,sum7,sum8;
char arr[3][3];
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cin>>arr[i][j];
}
}
sum1=sum2=sum3=sum4=sum5=sum6=sum7=sum8=0;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(i==j&&arr[i][j]=='B')
sum1++;
if(i+j==2&&arr[i][j]=='B')
sum2++;
}
if(arr[i][0]=='B')
sum3++;
if(arr[i][1]=='B')
sum4++;
if(arr[i][2]=='B')
sum5++;
if(arr[0][i]=='B')
sum6++;
if(arr[1][i]=='B')
sum7++;
if(arr[2][i]=='B')
sum8++;
}
if(sum1==3||sum2==3||sum3==3||sum4==3||sum5==3||sum6==3||sum7==3||sum8==3)
{
cout<<"BoBo wins!";
return 0;
}
sum1=sum2=sum3=sum4=sum5=sum6=sum7=sum8=0;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(i==j&&arr[i][j]=='K')
sum1++;
if(i+j==2&&arr[i][j]=='K')
sum2++;
}
if(arr[i][0]=='K')
sum3++;
if(arr[i][1]=='K')
sum4++;
if(arr[i][2]=='K')
sum5++;
if(arr[0][i]=='K')
sum6++;
if(arr[1][i]=='K')
sum7++;
if(arr[2][i]=='K')
sum8++;
}
if(sum1==3||sum2==3||sum3==3||sum4==3||sum5==3||sum6==3||sum7==3||sum8==3)
{
cout<<"KiKi wins!";
return 0;
}
else
{
cout<<"No winner!";
return 0;
}
}
- 首先定义了 8 个整型变量
sum1
到sum8
,它们将用于统计不同情况下特定字符出现的次数。接着定义了一个二维字符数组arr
,用于存储一个 3 行 3 列的字符矩阵,可能用来表示类似棋盘之类的布局。 - 通过两层嵌套的
for
循环,从标准输入(通常是控制台)读取 9 个字符,依次填充到arr
数组中,以构建这个 3x3 的字符矩阵。 - 先将所有的
sum
变量初始化为 0,以便后续准确统计字符B
出现的次数。 - 第一个嵌套
for
循环中,通过两个if
条件来统计两种对角线情况:if(i==j&&arr[i][j]=='B'):这个条件判断主对角线上(即行列索引相等的位置)的元素是否为B,如果是则sum1自增 1,用于统计主对角线上B出现的次数。if(i+j==2&&arr[i][j]=='B'):这个条件判断副对角线上(行列索引之和为 2 的位置)的元素是否为B,如果是则sum2自增 1,用于统计副对角线上B出现的次数。 - 然后通过 6 个单独的
if
语句分别统计每行、每列中字符B
出现的次数,分别累加到sum3
到sum8
这几个变量中。 - 最后通过一个
if
条件判断,如果上述 8 个统计变量中任意一个的值等于 3,就意味着在对应的行、列或者对角线上B
字符连续出现了 3 次,此时输出"BoBo wins!"
并结束程序(通过return 0
)。