KiKi和BoBo玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。
KiKi和BoBo玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。
三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表示没有棋子,为B代表BoBo玩家的棋子。
如果KiKi获胜,输出“KiKi wins!”;
如果BoBo获胜,输出“BoBo wins!”;
如果没有获胜,输出“No winner!”。
K O B O K B B O K
KiKi wins!
#include <stdio.h> int main() { char arr[3][3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { scanf(" %c", &arr[i][j]); } } /* for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ printf("%c ", arr[i][j]); } printf("\n"); }*/ int Knum = 0, Bnum = 0; //行判断 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (arr[i][j] == 'K') { Knum++; } if (arr[i][j] == 'B') { Bnum++; } } if (Knum == 3 || Bnum == 3) { if (Knum == 3) { printf("KiKi wins!"); return 0; } if (Bnum == 3) { printf("BoBo wins!"); return 0; } } Knum = 0; Bnum = 0; } //列判断 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (arr[j][i] == 'K') { Knum++; //printf("%d ", Knum); } if (arr[j][i] == 'B') { Bnum++; } } if (Knum == 3 || Bnum == 3) { if (Knum == 3) { printf("KiKi wins!"); return 0; } if (Bnum == 3) { printf("BoBo wins!"); return 0; } } Knum = 0; Bnum = 0; } //左斜判断 for (int i = 0; i < 3; i++) { if (arr[i][i] == 'K') { Knum++; //printf("%d ", Knum); } if (arr[i][i] == 'B') { Bnum++; } if (Knum == 3 || Bnum == 3) { if (Knum == 3) { printf("KiKi wins!"); return 0; } if (Bnum == 3) { printf("BoBo wins!"); return 0; } } } Knum = 0; Bnum = 0; //右斜判断 for (int i = 0; i < 3; i++) { if (arr[i][2 - i] == 'K') { Knum++; } if (arr[i][2 - i] == 'B') { Bnum++; } if (Knum == 3 || Bnum == 3) { if (Knum == 3) { printf("KiKi wins!"); return 0; } if (Bnum == 3) { printf("BoBo wins!"); return 0; } } } Knum = 0; Bnum = 0; //无人获胜 printf("No winner!"); return 0; }
#include <stdio.h> int main() { char arr[3][3] = {0}; int i = 0; int j = 0; char flag = 'c'; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { scanf("%c", &arr[i][j]); getchar(); } } for (i = 0; i < 3; i++) { if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2]) { flag = arr[i][1]; break; } if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i]) { flag = arr[1][i]; break; } } if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2]) { flag = arr[1][1]; } if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0]) { flag = arr[1][1]; } if (flag == 'K') printf("KiKi wins!"); else if (flag == 'B') printf("BoBo wins!"); else printf("No winner!"); return 0; }
#include <stdio.h> //应该还能简化,先写成这样吧 char tic_alg(char tic[3][3]) { char flag = 'O'; for (int i = 0; i < 3; i++) { //判断横排 if (tic[i][0] == tic[i][1] && tic[i][1] == tic[i][2]) { if (tic[i][1] != 'O') { flag = tic[i][1]; break; } } //判断竖排 if (tic[0][i] == tic[1][i] && tic[1][i] == tic[2][i]) { if (tic[i][1] != 'O') { flag = tic[1][i]; break; } } } //判断对角线 if ((tic[0][0] == tic[1][1] && tic[1][1] == tic[2][2]) || (tic[2][0] == tic[1][1] && tic[1][1] == tic[0][2])) { if (tic[1][1] != 'O') { flag = tic[1][1]; } } return flag; } int main() { char tic[3][3] = {0}; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { scanf(" %c", &tic[i][j]); } } char ret = tic_alg(tic); if ('K' == ret) { printf("KiKi wins!\n"); } else if ('B' == ret) { printf("BoBo wins!\n"); } else { printf("No winner!\n"); } return 0; }
#include <stdio.h> int main() { char arr[3][3]; int i; int count = 0; for(i=0;i<3;i++) { int j; for(j=0;j<3;j++) { scanf("%c ",arr[i]+j); } } //每一行 int flag = 0; for(i=0;i<3;i++) { int j; for(j=0;j<2;j++) { if(arr[i][j] == arr[i][j+1]) { flag++; } } if(flag == 2) { if(arr[i][j]=='K') { printf("KiKi wins!"); count = 1; } if(arr[i][j]=='B') { printf("BoBo wins!"); count = 1; } } flag = 0; } //每一列 flag = 0; for(i=0;i<3;i++) { int j; for(j=0;j<2;j++) { if(arr[j][i] == arr[j+1][i]) { flag++; } } if(flag == 2) { if(arr[j][i]=='K') { printf("KiKi wins!"); count = 1; } if(arr[j][i]=='B') { printf("BoBo wins!"); count = 1; } } flag = 0; } //对角线 if(arr[0][0]==arr[1][1]&&arr[1][1]==arr[2][2]) { if(arr[1][1] == 'K') { printf("KiKi wins!"); count = 1; } if(arr[1][1] == 'B') { printf("BoBo wins!"); count = 1; } } if(arr[0][2]==arr[1][1]&&arr[1][1]==arr[2][0]) { if(arr[1][1] == 'K') { printf("KiKi wins!"); count = 1; } if(arr[1][1] == 'B') { printf("BoBo wins!"); count = 1; } } //都没赢 if(count == 0) { printf("No winner!"); } return 0; }
#include <stdio.h> int main() { int i,j,bi=0,bj=0,ki=0,kj=0; char a[3][3]={0}; for(i=1;i<=3;i++) { for(j=1;j<=3;j++) scanf("%c ",&a[i][j]);//输入 } for(i=1;i<=3;i++) { for(j=1;j<=3;j++) { if(a[i][j]=='B') { bi+=i;//坐标相加 bj+=j; } if(a[i][j]=='K') { ki+=i; kj+=j; } } } if(bi%3==0&&bj%3==0)//一行、一列、对角线的坐标加起来均是3的倍数 printf("BoBo wins!"); else if(ki%3==0&&kj%3==0) printf("KiKi wins!"); else printf("No winner!"); return 0; }
#include <stdio.h> int main(){ int count_B = 0, count_K = 0, isKiki = 1, isBobo = 1; char arr[3][3]; int row[3] = {0}; int column[3] = {0}; for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ scanf("%c",&arr[i][j]); if(arr[i][j] == 'O'){ row[i] = 1; column[j] = 1; } getchar(); } } for(int i = 0; i < 3; i++){ if(row[i] == 0){ for(int j = 0; j < 2; j++){ if(arr[i][j] != arr[i][j+1]){ isKiki = 0; isBobo = 0; break; } } if(isBobo == 0){ isBobo = 1; isKiki = 1; break; } else if(arr[i][0] == 'K'){ printf("KiKi wins!"); return 0; } else { printf("BoBo wins!"); return 0; } } } for(int j = 0; j < 3; j++){ if(column[j] == 0){ for(int i = 0; i < 2; i++){ if(arr[i][j] != arr[i+1][j]){ isKiki = 0; isBobo = 0; break; } } if(isBobo == 0){ isBobo = 1; isKiki = 1; break; } else if(arr[0][j] == 'K'){ printf("KiKi wins!"); return 0; } else { printf("BoBo wins!"); return 0; } } } for(int i = 0; i < 3; i++){ if(arr[i][i] == 'K'){ count_K++; } else if(arr[i][i] == 'B'){ count_B++; } } if(count_K == 3){ printf("KiKi wins!"); return 0; } else if(count_B == 3) { printf("BoBo wins!"); return 0; } else { count_B = 0; count_K = 0; } for(int i = 0; i < 3; i++){ if(arr[i][2-i] == 'K'){ count_K++; } else if(arr[i][2-i] == 'B'){ count_B++; } } if(count_K == 3){ printf("KiKi wins!"); return 0; } else if(count_B == 3){ printf("BoBo wins!"); return 0; } else { printf("No winner!"); } return 0; }这就是所谓的shit mountain吧!
#include<stdio.h> int main() { char arr[3][3] = {0}; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { arr[i][j] = getchar(); getchar(); } } char ret = 0;//接收游戏情况,'K'KiK赢,'B'BoBo赢,0平局 for (int i = 0; i < 3; i++) { //横向 if (arr[i][0] != 'O' && arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2]) { ret = arr[i][0]; break; } //纵向 else if (arr[0][i] != 'O' && arr[0][i] == arr[1][i] && arr[0][i] == arr[2][i]) { ret = arr[0][i]; break; } } //主对角 if (arr[0][0] != 'O' && arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2]) ret = arr[0][0]; else if (arr[0][2] != 'O' && arr[0][2] == arr[1][1] && arr[0][2] == arr[2][0]) ret = arr[0][2]; if (ret == 'K') printf("KiKi wins!\n"); else if (ret == 'B') printf("BoBo wins!\n"); else printf("No winner!\n"); return 0; }
#include <stdio.h> int main() { char a[3][3]; char f = 'O'; for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) scanf("%c ", &a[i][j]); } for(int i = 0; i < 3; i++) { if(a[i][0]==a[i][1] && a[i][1]==a[i][2]) { if(a[i][0]=='K') f = 'K'; else if(a[i][0]=='B') f = 'B'; } } for(int j = 0; j < 3; j++) { if(a[0][j]==a[1][j] && a[1][j]==a[2][j]) { if(a[0][j]=='K') f = 'K'; else if(a[0][j]=='B') f = 'B'; } } if(a[0][0]==a[1][1] && a[1][1]==a[2][2]) { if(a[1][1]=='K') { f = 'K'; //printf("K\n"); } else if(a[1][1]=='B') f = 'B'; } if(a[0][2]==a[1][1] && a[1][1]==a[2][0]) { if(a[1][1]=='K') f = 'K'; else if(a[1][1]=='B') f = 'B'; } if(f != 'O') { if(f == 'K') printf("KiKi wins!"); if(f == 'B') printf("BoBo wins!"); } else printf("No winner!"); return 0; }
#include <stdio.h> #define ROW 3 #define COL 3 char judge(char board[ROW][COL], int row, int col){ for(int i = 0; i < row; i++){ if(board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ') //行判断 return board[i][0]; if(board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') //列判断 return board[0][i]; } if(board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ') //对角线 return board[1][1]; if(board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') //斜对角线 return board[1][1]; return ' '; } int main(){ char board[ROW][COL]; for(int i = 0; i < ROW; i++){ for(int j = 0; j < COL; j++) scanf("%c ", &board[i][j]); } char status = judge(board, ROW, COL); if(status == 'K') printf("KiKi wins!"); else if (status == 'B') printf("BoBo wins!"); else printf("No winner!"); return 0; }
#include<stdio.h> int main() { char arr[3][3] = {0}; char result = 0; //用来判断游戏最终结果 int i = 0; for(i = 0;i<3;i++) { int j = 0; for(j = 0;j<3;j++) scanf("%c ",&arr[i][j]); } for(i = 0;i<3;i++) //判断行or列有没有三个连着的元素相等 { if(arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2]) { result = arr[i][0]; break; } if(arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i]) { result = arr[0][i]; break; } } if(arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2]) //判断主对角线 result = arr[0][0]; if(arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0]) //判断副对角线 result = arr[0][2]; if(result == 'K') printf("KiKi wins!\n"); else if(result == 'B') printf("BoBo wins!\n"); else printf("No winner!\n"); return 0; }
#include<stdio.h> char is_win(char arr[3][3]) { int i,j; for(i=0;i<3;i++) { if(arr[i][0]==arr[i][1]&&arr[i][1]==arr[i][2]&&arr[i][1]!='O') return arr[i][1]; } for(j=0;j<3;j++) { if(arr[0][j]==arr[1][j]&&arr[1][j]==arr[2][j]&&arr[1][j]!='O') return arr[1][j]; } if((arr[0][0]==arr[1][1]&&arr[1][1]==arr[2][2]&&arr[1][1]!='O')||(arr[0][2]==arr[1][1]&&arr[1][1]==arr[2][0]&&arr[1][1]!='O')) return arr[1][1]; return 0; } int main() { char Ki; int i,j; char arr[3][3]={0}; for(i=0;i<3;i++) { for(j=0;j<3;j++) { scanf("%c",&Ki); getchar(); arr[i][j]=Ki; } } char ret=is_win(arr); if(ret=='K') { printf("KiKi wins!\n"); } else if(ret=='B') { printf("BoBo wins!\n"); } else printf("No winner!\n"); return 0; }
#include <stdio.h> int main() { char arr[3][3]={ 0 }; int i = 0; int j = 0; for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(j<2) scanf("%c ",&arr[i][j]); else scanf("%c\n",&arr[i][j]); } } //判断横向 for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(arr[i][j]!=arr[i][j+1]) { break; } if(1==j) { if(arr[i][j]=='K') printf("KiKi wins!"); else printf("BoBo wins!"); return 0; } } } //判断纵向 for(j=0;j<3;j++) { for(i=0;i<3;i++) { if(arr[i][j]!=arr[i+1][j]) { break; } if(1==i) { if(arr[i][j]=='K') printf("KiKi wins!"); else if(arr[i][j]=='B') printf("BoBo wins!"); else continue; return 0; } } } //判断对角 for(i=0,j=0;i<3||j<3;i++,j++) { if(arr[i][j]!=arr[i+1][j+1]) { break; } if(i==1&&j==1) { if(arr[i][j]=='K') printf("KiKi wins!"); else if(arr[i][j]=='B') printf("BoBo wins!"); else continue; return 0; } } for(i=0,j=2;i<3||j>=0;i++,j--) { if(arr[i][j]!=arr[i+1][j-1]) { break; } if(i==1&&j==1) { if(arr[i][j]=='K') printf("KiKi wins!"); else if(arr[i][j]=='B') printf("BoBo wins!"); else continue; return 0; } } printf("No winner!"); }
因为固定了三行三列,所以穷举了赢的几种可能
#include<stdio.h> int main(){ int i,j,k,flag=0; char a[3][3]; for(i=0;i<3;i++){ for(j=0;j<3;j++){ scanf(" %c",&a[i][j]);//%c前加空格吸收回车 } } for(j=0;j<3;j++){ if(a[j][0]=='K'&&a[j][1]=='K'&&a[j][2]=='K'){ printf("KiKi wins!"); flag=1; break; } if(a[0][j]=='K'&&a[1][j]=='K'&&a[2][j]=='K'){ printf("KiKi wins!"); flag=1; break; } if(a[0][0]=='K'&&a[1][1]=='K'&&a[2][2]=='K'){ printf("KiKi wins!"); flag=1; break; } if(a[0][2]=='K'&&a[1][1]=='K'&&a[2][0]=='K'){ printf("KiKi wins!"); flag=1; break; } if(a[j][0]=='B'&&a[j][1]=='B'&&a[j][2]=='B'){ printf("BoBo wins!"); flag=1; break; } if(a[0][j]=='B'&&a[1][j]=='B'&&a[2][j]=='B'){ printf("BoBo wins!"); flag=1; break; } if(a[0][0]=='B'&&a[1][1]=='B'&&a[2][2]=='B'){ printf("BoBo wins!"); flag=1; break; } if(a[0][2]=='B'&&a[1][1]=='B'&&a[2][0]=='B'){ printf("BoBo wins!"); flag=1; break; } } if(flag==0){ printf("No winner!"); } return 0; }