题解 | #井字棋#
井字棋
http://www.nowcoder.com/practice/0375c1d206ef48a3894f72aa07b2fdde
int output(int val) { //判断是否有三连棋
if (val / 3 == 'K') {
printf("KiKi wins!");
val = 1; //有则返回1,代表已打印结果
} else if (val / 3 == 'B') {
printf("BoBo wins!");
val = 1;
} else val = 0; //返回0,代表无打印并初始化传入值
return val;
}
int main() {
char ch[3][3];
//val1储存行列三连数的和,val2存储右斜对角三个数的值,val3储存左斜对角三个数的值
int val1 = 0, val2 = 0, val3 = 0;
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 3; j++) {
if (i < 3 ) {
scanf("%c ", &ch[i][j]); //依次行输入
val1 += ch[i][j]; //计算同一行三个值的和
if (j == 2) val1 = output(val1); //三个都计算完成后判断
} else if (i >= 3) {
val1 += (int)ch[j][i - 3]; //计算同一列三个值的和
if (j == 2) val1 = output(val1);
}
if (i < 3 && i == j) {
val2 += ch[i][j]; //计算右斜对角三个数的和
if (i + j == 4) val2 = output(val2); //三个都计算完成后判断
}
if (i < 3 && i + j == 2) {
val3 += (int)ch[i][j]; //计算左斜对角三个数的和
if (i == 2) val3 = output(val3); //三个都计算完成后判断
}
}
//若已打印结果,结束循环
if (val1 == 1 || val2 == 1 || val3 == 1) break;
//若循环至最后一次还未打印结果,则代表无人获胜
if (i == 5) printf("No winner!");
}
return 0;
}