(来自 牛客网 编程初学者入门训练)
1.问题:
(链接呈上:井字棋)
描述
KiKi和BoBo玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。
输入描述:
三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表示没有棋子,为B代表BoBo玩家的棋子。
输出描述:
如果KiKi获胜,输出“KiKi wins!”;
如果BoBo获胜,输出“BoBo wins!”;
如果没有获胜,输出“No winner!”。
示例1
输入:
K O B O K B B O K输出:
KiKi wins!
2.思路:
首先:输入的井字棋都是字符,故用字符数组进行存储(注意要包含空格以及 '\0' '\n');
其次:获胜的几种情形:行相同or列相同(用for循环分别测试各行各列,但是列时要注意只要真正的字符,而非 '\0' or '\n')对角线相同(对角线两种情况)
最后:注意 获胜 or 失败 情况,一定要注意书写!注意 标志flag!
3.代码:
#include<stdio.h>
int main()
{
char chess[3][6] = { 0 };
//printf("请开始下棋:\n");
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 6; j++)
{
scanf("%c", &chess[i][j]);
}
}
int flag = 0;
for (i = 0; i < 6; i++)
{
//行判断
if ((chess[i][0] == chess[i][2]) && (chess[i][2] == chess[i][4]) && (chess[i][0] != 'O'))
{
if (chess[i][0] == 'K')
{
printf("KiKi wins!\n");
flag = 1;
break;
}
else if (chess[i][0] == 'B')
{
printf("BoBo wins!\n");
flag = 1;
break;
}
}
//列判断
//列判断要注意 空格!以及 O
if ((chess[0][i] == chess[1][i]) && (chess[1][i] == chess[2][i]) && ((chess[0][i] != 'O') && (chess[0][i] != ' ')))
{
if (chess[0][i] == 'K')
{
printf("KiKi wins!\n");
flag = 1;
break;
}
else if (chess[0][i] == 'B')
{
printf("BoBo wins!\n");
flag = 1;
break;
}
}
//对角线判断:有两种情况!!
if ((chess[0][0] == chess[1][2]) && (chess[1][2] == chess[2][4]) && (chess[0][0] != 'O'))
{
if (chess[0][0] == 'K')
{
printf("KiKi wins!\n");
flag = 1;
break;
}
if (chess[0][0] == 'B')
{
printf("BoBo wins!\n");
flag = 1;
break;
}
}
if ((chess[0][4] == chess[1][2]) && (chess[1][2] == chess[2][0]) && (chess[0][4] != 'O'))
{
if (chess[0][4] == 'K')
{
printf("KiKi wins!\n");
flag = 1;
break;
}
if (chess[0][4] == 'B')
{
printf("BoBo wins!\n");
flag = 1;
break;
}
}
}
if (flag != 1)
{
printf("No winner!\n");
}
return 0;
}
4.总结:
因为一直有漏就花费了很长时间,不过只要最后写出来就好!!
继续加油呀!