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;
}