Tic Tac Toe
编程基础——函数调用
1.3:Tic Tac Toe
题目:
输入
• 输入的第一行给出N,表示测试用例的数目。然后给出
4N-1行,说明N个用空行分隔的网格图。
输出
• 对于每个测试用例,在一行中输出"yes"或"no",表示该
网格图是否是有效的三连棋游戏的一个步骤。
试题分析:
有效的三连棋一定满足如下特征:
•o的数量一定<=x的数量
•如果x的数量比o的数量多1,那么不可能o赢
•如果x和o的数量相等,则不可能是x赢。
调用fact函数判断是谁赢并返回相应的类型
根据说给的特征进行执行
注意点:
•c语言不可以返回bool类型
•三目运算符比if语句更简单
t=fact(t)?1:0 ——t是否返回相应的类型,如果是t=1,否则t=0;
二维数组可以将一维数组看成是字符串
样例:
Sample Input
2
X.O
OO.
XXX
O.X
XX.
OOO
Sample Output
yes
no
c
#include <stdio.h>
char a[3][3];
int fact(char c){//调用函数实现赢的情况
int i;
for(i=0;i<3;++i){
if(a[0][i]==c){
if(a[1][i]==c&&a[2][i]==c) return 1;//竖排相同
}
}
for(i=0;i<3;++i){
if(a[i][0]==c){
if(a[i][1]==c&&a[i][2]==c) return 1;//横排相同
}
}
if(a[0][0]==c&&a[1][1]==c&&a[2][2]==c) return 1;//两条对角线相同
if(a[2][0]==c&&a[1][1]==c&&a[0][2]==c) return 1;
return 0;
}
int main () {
int k;
scanf("%d",&k);
while(k--){
int i,j,t=0,m=0,n=0;
for(i=0;i<3;++i) {//将二维数组以一维看成一个字符串
scanf("%s",a[i]);
}
for(i=0;i<3;++i){
for(j=0;j<3;++j){
if(a[i][j]=='X') m++;//统计每个测试用例x,o的数量
else if(a[i][j]=='O') n++;
}
}
if(m>=n){
if(m==n){
t=fact('X')==1?0:1;//1为有效,0为无效
}
else if(m-n==1){
t==fact('O')==1?0:1;
}
else t=0;
}
else t=0;//每次结束后初始化变量
printf("%s\n",t==1?"yes":"no");//三目运算符
}
return 0;
}
c++
#include <stdio.h>
char mp[3][3];
int x, o;
int flag;
char cal(char tar) {
for (int i = 0; i < 3; ++i) {
if (mp[0][i] == tar) {
if (mp[1][i]==tar && mp[2][i]==tar) {
return true;
}
}
}
for (int i = 0; i < 3; ++i) {
if (mp[i][0] == tar) {
if (mp[i][1]==tar && mp[i][2]==tar) {
return true;
}
}
}
if (mp[0][0]==tar && mp[1][1]==tar && mp[2][2]==tar) {
return true; }
if (mp[0][2]==tar && mp[1][1]==tar && mp[2][0]==tar) {
return true; }
return false;
}
int main() {
int n;
scanf("%d",&n);
while (n--) {
flag = x = o = 0;
for (int i = 0; i < 3; ++i) {
scanf("%s", mp[i]); }
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (mp[i][j] == 'X') {
x++; }
else if (mp[i][j] == 'O') {
o++; }
}
}
if (x >= o) {
if (x == o) {
flag = cal('X') ? 0 : 1; }
else if (x - o == 1) {
flag = cal('O') ? 0 : 1; }
else
{flag = 0;
}
}
else {flag = 0;
}
printf("%s\n", flag==1 ? "yes" : "no"); }
return 0;
}
