首页 > 试题广场 >

井字棋

[编程题]井字棋
  • 热度指数:21420 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

KiKiBoBo玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。


输入描述:
三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为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!
#include <stdio.h>
int main()
{
    char a[3][3];
    int i,j;
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            a[i][j]=getchar();
            getchar();
        }
    }
    int flag=0;
    for(i=0;i<3;i++){
        if(a[i][0]=='K'&&a[i][1]=='K'&&a[i][2]=='K'){
            flag=1;
            break;
        }
    }
    for(i=0;i<3;i++){
        if(a[0][i]=='K'&&a[1][i]=='K'&&a[2][i]=='K'){
            flag=1;
            break;
        }
    }
    if(a[0][0]=='K'&&a[1][1]=='K'&&a[2][2]=='K') flag=1;
    if(a[0][2]=='K'&&a[1][1]=='K'&&a[2][0]=='K') flag=1;
    if(a[0][0]=='B'&&a[1][1]=='B'&&a[2][2]=='B') flag=-1;
    if(a[0][2]=='B'&&a[1][1]=='B'&&a[2][0]=='B') flag=-1;
    for(i=0;i<3;i++){
        if(a[i][0]=='B'&&a[i][1]=='B'&&a[i][2]=='B'){
            flag=-1;
            break;
        }
    }
    for(i=0;i<3;i++){
        if(a[0][i]=='B'&&a[1][i]=='B'&&a[2][i]=='B'){
            flag=-1;
            break;
        }
    }
    if(flag==1) printf("KiKi wins!\n");
    else if(flag==0) printf("No winner!\n");
    else printf("BoBo wins!\n");
}

发表于 2020-04-10 23:31:50 回复(0)
最简单粗暴的方式就是一个方向一个方向的判断。先判断左斜线和右斜线。在分别判断行和列是否有连续的字符。只要有就进一步判断谁会赢。
#include<bits/stdc++.h>
using namespace std;
char m[3][3];

int main(){
    for(int i = 0; i < 3; i++)
        for(int j = 0; j < 3; j++)
            cin >> m[i][j];
    /*左斜线*/
    if(m[0][0] == m[1][1] && m[0][0] == m[2][2]){
        if(m[0][0] == 'K') goto K;
        else if(m[0][0] == 'B') goto B;
    }
    /*右斜线*/
    if(m[0][2] == m[1][1] && m[0][2] == m[2][0]){
        if(m[0][2] == 'K') goto K;
        else if(m[0][2] == 'B') goto B;
    }
   
    for(int i = 0; i < 3; i++){
         /*行相等*/
        if(m[i][0] == m[i][1] && m[i][0] == m[i][2]){
            if(m[i][0] == 'K') goto K;
            else if(m[i][0] == 'B') goto B;
        }
        /*列相等*/
        if(m[0][i] == m[1][i] && m[0][i] == m[2][i]){
            if(m[0][i] == 'K') goto K;
            else if(m[0][i] == 'B') goto B;
        }
    }
    cout << "No winner!" << endl;
    return 0;
    K:
        cout << "KiKi wins!" << endl;
        return 0;
    B:
        cout << "BoBo wins!" << endl;
        return 0;
}

发表于 2020-06-02 22:26:22 回复(0)
#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;
}

发表于 2022-08-06 17:06:31 回复(0)
#include<stdio.h>

void kwin(){
    printf("KiKi wins!\n");    
}
void bwin(){
    printf("BoBo wins!\n");
}
void nowin(){
    printf("No winner!\n");
}

int main(){
    char a[3][3],i,j;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            scanf(" %c ",&a[i][j]);
    if(a[0][0]==a[0][1]&&a[0][0]==a[0][2]){
        if(a[0][0]=='K') kwin();
        else if(a[0][0]=='B') bwin();
        else nowin();
    }
    else if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]){
            if(a[0][0]=='K') kwin();
            else if(a[0][0]=='B') bwin();
            else nowin();
    }    
    else if(a[0][0]==a[1][0]&&a[0][0]==a[2][0]){
            if(a[0][0]=='K') kwin();
            else if(a[0][0]=='B') bwin();
            else nowin();        
    }
    else if(a[0][1]==a[1][1]&&a[0][1]==a[2][1]){
            if(a[0][1]=='K') kwin();
            else if(a[0][1]=='B') bwin();
            else nowin();
    }   
    else if(a[0][2]==a[1][2]&&a[0][2]==a[2][2]){
            if(a[0][2]=='K') kwin();
            else if(a[0][2]=='B') bwin();
            else nowin();
    }  
    else if(a[0][2]==a[1][1]&&a[0][2]==a[2][0]){
            if(a[0][2]=='K') kwin();
            else if(a[0][2]=='B') bwin();
            else nowin();
    }
    else if(a[1][0]==a[1][1]&&a[1][0]==a[1][2]){
            if(a[1][0]=='K') kwin();
            else if(a[1][0]=='B') bwin();
            else nowin();
    }  
    else if(a[2][0]==a[2][1]&&a[2][0]==a[2][2]){
            if(a[2][0]=='K') kwin();
            else if(a[2][0]=='B') bwin();
            else nowin();
    }
    else nowin();
}

需要判断8个方向。
发表于 2021-06-05 23:36:18 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[][] chessBoard = new String[3][3];
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                chessBoard[i][j] = scanner.next();
            }
        }
        String result = checkMessage(chessBoard);
        System.out.println(result);
    }
    public static String checkMessage(String[][] chessBoard) {
        String message ;
        for (int i = 0; i < 3; i++) {
            if (chessBoard[i][0].equals(chessBoard[i][1]) && chessBoard[i][1].equals(chessBoard[i][2])) {
                message = checkMan(chessBoard[i][0]);
                return message;
            } else if (chessBoard[0][i].equals(chessBoard[1][i]) && chessBoard[1][i].equals(chessBoard[2][i])) {
                message = checkMan(chessBoard[0][i]);
                return message;
            }
        }
        message = checkMan(chessBoard[1][1]);
        if (chessBoard[0][0].equals(chessBoard[1][1]) && chessBoard[1][1].equals(chessBoard[2][2])) {
            return message;
        } else if (chessBoard[0][2].equals(chessBoard[1][1]) && chessBoard[1][1].equals(chessBoard[2][0])) {
            return message;
        }
        return message;
    }
    public static String checkMan(String str) {
        switch (str) {
            case "K":
                return "KiKi wins!";
            case "B":
                return "BoBo wins!";
            case "O":
                return "No winner!";
        }
        return null;
    }
}

编辑于 2021-03-19 20:01:29 回复(0)
zl=[input().split() for i in range(3)]
options=[[zl[i][j] for i in range(3) ] for j in range(3)]
options.extend([[zl[i][j] for j in range(3) ] for i in range(3)])
options.extend([[zl[i][i] for i in range(3)]])
options.extend([[zl[i][2-i] for i in range(3)]])
c=0
for i in options:
    tmp=list(set(i))
    if len(tmp)==1 and tmp[0]=='B':
        print("BoBo wins!")
    elif len(tmp)==1 and tmp[0]=='K':
        print("KiKi wins!")
    else:
        c+=1
if c==8:
    print("No winner!")

发表于 2020-12-24 15:10:32 回复(0)

#include<stdio.h>
int main() {
    char tmp[3][3];
    for(int i = 0; i < 3; i++){
        for(int j = 0 ; j < 3; j++) {
            scanf("%c ", &tmp[i][j]);
        }
    }
    int k = 0, b = 0;
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            if(tmp[i][j] == 'K') k++;
            if(tmp[i][j] == 'B') b++;
        }
        if(k == 3) break;
        if(b == 3) break;
        k = 0, b = 0;
    }
    int k1 = 0, b1 = 0;
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            if(tmp[j][i] == 'K') k1++;
            if(tmp[j][i] == 'B') b1++;
        }
        if(k1 == 3) break;
        if(b1 == 3) break;
        k1 = 0, b1 = 0;
    }
    int k2 = 0, b2 = 0;
    for(int i = 0; i < 3; i++){
        if(tmp[i][i] == 'K') k2++;
        if(tmp[i][i] == 'B') b2++;
        if(k2 == 3) break;
        if(b2 == 3) break;
    }
    int k3 = 0, b3 = 0;
    for(int i = 0; i < 3; i++){
        if(tmp[i][2 - i] == 'K') k3++;
        if(tmp[i][2 - i] == 'B') b3++;
        if(k3 == 3) break;
        if(b3 == 3) break;
    }
    if(k == 3 || k1 == 3 || k2 == 3 || k3 == 3) printf("KiKi wins!");
    else if(b == 3 || b1 == 3 || b2 == 3 || b3 == 3) printf("BoBo wins!");
    else printf("No winner!");
}
感觉这种方法好呆

发表于 2020-12-06 19:37:14 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    char ch[3][3];
    int flag_k = 0,flag_b = 0;
    for(int i = 0;i<3;i++){
        for(int j = 0;j<3;j++){
            cin>>ch[i][j];
        }
    }
            //判断K
            if(ch[0][0] == 'K' && ch[0][1] == 'K' && ch[0][2] == 'K')
                flag_k = 1;
            else if(ch[1][0] == 'K' && ch[1][1] == 'K' && ch[1][2] == 'K')
                flag_k = 1;
            else if(ch[2][0] == 'K' && ch[2][1] == 'K' && ch[2][2] == 'K')
                flag_k = 1;
            else if(ch[0][0] == 'K' && ch[1][0] == 'K' && ch[2][0] == 'K')
                flag_k = 1;
            else if(ch[0][1] == 'K' && ch[1][1] == 'K' && ch[2][1] == 'K')
                flag_k = 1;
            else if(ch[0][2] == 'K' && ch[1][2] == 'K' && ch[2][2] == 'K')
                flag_k = 1;
            else if(ch[0][0] == 'K' && ch[1][1] == 'K' && ch[2][2] == 'K')
                flag_k = 1;
            else if(ch[0][2] == 'K' && ch[1][1] == 'K' && ch[2][0] == 'K')
                flag_k = 1;
            //判断B
            else if(ch[0][0] == 'B' && ch[0][1] == 'B' && ch[0][2] == 'B')
                flag_b = 1;
            else if(ch[1][0] == 'B' && ch[1][1] == 'B' && ch[1][2] == 'B')
                flag_b = 1;
            else if(ch[2][0] == 'B' && ch[2][1] == 'B' && ch[2][2] == 'B')
                flag_b = 1;
            else if(ch[0][0] == 'B' && ch[1][0] == 'B' && ch[2][0] == 'B')
                flag_b = 1;
            else if(ch[0][1] == 'B' && ch[1][1] == 'B' && ch[2][1] == 'B')
                flag_b = 1;
            else if(ch[0][2] == 'B' && ch[1][2] == 'B' && ch[2][2] == 'B')
                flag_b = 1;
            else if(ch[0][0] == 'B' && ch[1][1] == 'B' && ch[2][2] == 'B')
                flag_b = 1;
            else if(ch[0][2] == 'B' && ch[1][1] == 'B' && ch[2][0] == 'B')
                flag_b = 1;
    if(flag_k == 1)
        cout<<"KiKi wins!"<<endl;
    else if(flag_b == 1)
        cout<<"BoBo wins!";
    else if(flag_k == 0 && flag_b == 0)
        cout<<"No winner!";
        
    
    
}

发表于 2020-10-03 17:34:20 回复(0)
#include<iostream>
using namespace std;

int main()
{
    char str[3][3];
    //读取输入
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
            cin>>str[i][j];
    }
    char winner='n';
    //逐行判断
    for(int i=0;i<3;i++)
    {
        char help=str[i][0];
        bool result=true;
        for(int j=1;j<3;j++)
        {
            if(help==str[i][j])
                continue;
            else
            {
                result=false;
                break;
            }
        }
        if(result)
        {
            winner=str[i][0];
            break;
        }
    }
    //逐列判断
    for(int i=0;i<3;i++)
    {
        char help=str[0][i];
        bool result=true;
        for(int j=1;j<3;j++)
        {
            if(help==str[j][i])
                continue;
            else
            {
                result=false;
                break;
            }
        }
        if(result)
        {
            winner=str[0][i];
            break;
        }
    }
    //主对角线
    if(winner=='n')
        if(str[0][0]==str[1][1]&&str[1][1]==str[2][2])
            winner=str[0][0];
    //副对角线
    if(winner=='n')
        if(str[2][0]==str[1][1]&&str[1][1]==str[0][2])
            winner=str[2][0];
    switch(winner)
    {
        case 'K':
            cout<<"KiKi wins!"<<endl;
            break;
        case 'B':
            cout<<"BoBo wins!"<<endl;
            break;
        default:
            cout<<"No winner!"<<endl;
    }
    return 0;
}

发表于 2020-07-23 18:32:05 回复(0)
一、负一、零
#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<vector<int>> vv(3, vector<int>(3, 0));
    for(int i=0;i<3;i++) {
        for(int j=0;j<3;j++) {
            string s;
            cin >> s;
            if(s=="K")
                vv[i][j]++;
            else if(s=="B")
                vv[i][j]--;
        }
    }
    for(int i=0;i<3;i++) {
        int r = 0, c = 0;
        for(int j=0;j<3;j++) {
            r += vv[i][j];
            c += vv[j][i];
        }
        if(r==3 || c==3) {
            cout << "KiKi wins!";
            return 0;
        }
        else if(r==-3 || c==-3) {
            cout << "BoBo wins!";
            return 0;
        }
    }
    int a = vv[0][0]+vv[1][1]+vv[2][2];
    int b = vv[2][0]+vv[1][1]+vv[0][2];
    if(a==3 || b==3) {
        cout << "KiKi wins!";
        return 0;
    }
    else if(a==-3 || b==-3) {
        cout << "BoBo wins!";
        return 0;
    } 
    cout << "No winner!";
    return 0;
}


发表于 2020-07-22 19:54:20 回复(0)

                           JavaScript

var a = new Array();
var aa = new Array();
  
var n = 3;
while(n--){
    var b = readline().split(" ");
    a.push(b);
      
    var res = b[0]+b[1]+b[2];
    aa.push(res);
}
  
var res= "";
res = a[0][0] + a[1][0] + a[2][0]; aa.push(res);
res = a[0][1] + a[1][1] + a[2][1]; aa.push(res);
res = a[0][2] + a[1][2] + a[2][2]; aa.push(res);
res = a[0][0] + a[1][1] + a[2][2]; aa.push(res);
res = a[0][2] + a[1][1] + a[2][0]; aa.push(res);
  
  
var f = false;
for(i=0;i<aa.length;i++){
    if(aa[i] == "KKK") {console.log("KiKi wins!"); f = true; break;}
    if(aa[i] == "BBB") {console.log("BoBo wins!"); f = true; break;}
      
}
if(!f) console.log("No winner!")


发表于 2020-06-23 09:13:46 回复(0)
#include<iostream>
using namespace std;
int main()
{
char a[3][3],ch='O';
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
cin>>a[i][j];
for(int i=0;i<3;i++)
{
for(int j=1;j<3;j++)            //行
{
if(a[i][j-1]!=a[i][j])    break;
if(j==3-1)    ch=a[i][j];
}
for(int k=1;k<3;k++)            //列
{
if(a[k-1][i]!=a[k][i])    break;
if(k==3-1)    ch=a[k][i];
}
}
for(int p=1;p<3;p++)                //对角线
{
if(a[0][0]!=a[p][p])    break;
if(p==3-1)    ch=a[p][p];
}
int flag=1;
for(int i=0;i<3;i++)                //反对角线
{
for(int j=0;j<3;j++)
{
if(i+j==3-1)
{
if(a[0][3-1]!=a[i][j])    {flag=0;break;}
if(flag&&i==3-1)    ch=a[i][j];
}
}
}
if(ch=='K')    cout<<"KiKi wins!";
else if(ch=='B')    cout<<"BoBo wins!";
else    cout<<"No winner!";
return 0;
}
编辑于 2020-05-09 16:31:21 回复(0)
#include <stdio.h>
#define size 3
int main(){
    char board[size][size];
    int i, j;
    int numK, numB;
    char winner = 'N';
    
    for(i=0;i<size;i++){
        for(j=0;j<size;j++){
            scanf("%c",&board[i][j]);
            getchar();
        }
    } 
    //检查行
    for(i=0;i<size && 'N' == winner;i++){   // &&winner == N表示每行检查完没有赢才能继续检查下一行 
        numK = 0; numB = 0;                       // 每次检查行前,重置为0
        for(j=0;j<size;j++){
            if('K' == board[i][j]){
                numK++;
            }
            else if('B' == board[i][j]){
                numB++;
            }
        }
        //每行结束后检查K和B各自的数量,如果有一方为3,就表明胜利 
        if(size == numK){        
            winner = 'K';
        }
        else if (size == numB){
            winner = 'B';
        }
    }
    //如果检查行没有胜利,就检查列
    if('N' == winner){
        for(j=0;j<size && 'N' == winner;j++){
            numK = 0; numB = 0;
            for(i=0;i<size;i++){
                if('K' == board[i][j]){
                    numK++;
                }
                else if('B' == board[i][j]){
                    numB++;
                }
            }
        //每列结束后检查K和B各自的数量
        if(size == numK){
            winner = 'K';
        } 
        else if (size == numB){
            winner = 'B';
        }
        }
    }
    //如果没有赢家,检查顺对角线
    if('N' == winner){
        numK = 0; numB = 0;
        for(i=0;i<size;i++){
            if('K'==board[i][i]){
                numK++;
        } 
            else if('B'==board[i][i]){
                numB++;
            }
        }
        //判断赢家 
        if(size == numK){
            winner = 'K';
        } 
        else if (size == numB){
            winner = 'B';
        }
    }
    //如果没有赢家,检查反对角线
    if('N'==winner){	 
        numK = 0; numB = 0;
        for(i=0;i<size;i++){
            if('K'==board[i][size-1-i]){
                numK++;
        }
            else if('B'==board[i][size-1-i]){
                numB++;
        }
        }
        //判断赢家 
        if(size == numK ){
            winner = 'K';
        }
        else if (size == numB ){
            winner = 'B';
        }
    }
    //输出结果
    if('K'==winner){
        printf("KiKi wins!");
    }
    else if('B'==winner){
        printf("BoBo wins!");
    }
    else {
        printf("No winner!");
    }
    return 0;
}

分行列对角四种情况,逐一判断。
编辑于 2020-03-27 17:02:22 回复(0)
通解:
三字棋(井字棋)、5字棋、n(n为奇数)字棋.......都可以,只更改n的值即可
#include<stdio.h>
int main()
{
    char arr[3][3]={0};
   for(int i=0;i<3;i++)
   {
       for(int j=0;j<3;j++)
       {
           scanf("%c",&arr[i][j]);
           getchar();
       }
   }  
    int a=0,b=0,c=0,d=0;
    char ch=0;
    int i=0,j=0;
    int n=3;
        for( i=0;i<n;i++)
        {
            for( j=0;j<n-1;j++)
            {        //判断每一行是否相等
                if(arr[i][j]==arr[i][j+1])
                {
                    ch=arr[i][j];
                    a++;
                    if(a==n-1)
                        break;
                }
                                    //判断每一列是否相等
                if(arr[j][i]==arr[j+1][i])
                {
                    ch=arr[j][i];
                    b++;
                }
            }
            if(a==n-1)
            {
                break;
            }
            a=0;
            if(b==n-1)
            {
                break;
            }
            b=0;
        }
    
    
    
    //判断斜线是否相等
    for(j=0 ,i=0;i<n-1;i++,j++)
    {
        if(arr[i][j]==arr[i+1][j+1])
        {
            c++;
        }
    }
    
    
    
    //判断斜线是否相等
    for(i=n-1,j=0;i>0;i--,j++)
    {
        if(arr[i][j]==arr[i-1][j+1])
        {
            d++;
        }
    }
    


    if((c==n-1||d==n-1))
        ch=arr[(n/2)][(n/2)];
    
    
    if((a==n-1||b==n-1||c==n-1||d==n-1)&&ch=='K')
    {
        printf("KiKi wins!");
    }
    else if((a==n-1||b==n-1||c==n-1||d==n-1)&&ch=='B')
    {
        printf("BoBo wins!");
    }
    
    else
    {
        printf("No winner!");
    }
    
    return 0;
}


编辑于 2021-07-26 16:01:07 回复(0)
#include <stdio.h>

int main()
{
    char chess[3][3];
    int i, j;
    for(i = 0; i < 3; i++)
        for(j = 0; j < 3; j++)
        {
            chess[i][j] = getchar();
            getchar();
        }
    char tag = 'O';
    for(i = 0; i < 3; i++)
    {
        if(chess[i][0] == chess[i][1] && chess[i][1] == chess[i][2])
        {
            tag = chess[i][0];
            break;
        }
        if(chess[0][i] == chess[1][i] && chess[1][i] == chess[2][i])
        {
            tag = chess[0][i];
            break;
        }
    }
    if(chess[0][0] == chess[1][1] && chess[1][1] == chess[2][2])
        tag = chess[0][0];
    if(chess[0][2] == chess[1][1] && chess[1][1] == chess[2][0])
        tag = chess[1][1];
    if(tag == 'K')
        printf("KiKi wins!\n");
    else if(tag == 'B')
        printf("BoBo wins!\n");
    else
        printf("No winner!\n");
}

发表于 2020-04-07 15:44:55 回复(1)
#include <stdio.h>

char Jud(char ch[3][3]){
    // 判定行
    int j = 0;
    for(j = 0; j < 3; j++){
        if(ch[0][j] == ch[1][j] && ch[1][j] == ch[2][j]){
            // 返回胜利者的棋子类型
            return ch[0][j];
        }
    }
    // 判定列
    int i = 0;
    for(i = 0; i < 3; i++){
        if(ch[i][0] == ch[i][1] && ch[i][1] == ch[i][2]){
            // 返回胜利者的棋子类型
            return ch[i][0];
        }
    }
    // 判定主对角线
    if(ch[0][0] == ch[1][1] && ch[1][1] == ch[2][2]){
        // 返回胜利者的棋子类型
        return ch[1][1];
    }
    // 判定次对角线
    if (ch[0][2] == ch[1][1] && ch[1][1] == ch[2][0]) {
        // 返回胜利者的棋子类型
        return ch[1][1];
    }
    // 否则目前没有人获胜,返回-1
    return -1;
}

int main(){
    
    char ch[3][3] = {0};
    int i = 0;
    int j = 0;
    // 输入棋盘
    for (i = 0; i < 3; i++) {
        scanf("%c %c %c", &ch[i][0], &ch[i][1], &ch[i][2]);
        // 每行输入完毕都要回车使得三个字符按%c %c %c格式导入scanf
        // 所以每次输入完一行后,将剩余的\n清理
        getchar();
    }
    // 判定
    char ret = Jud(ch);
    if ('K' == ret) {
        printf("KiKi wins!\n");
    }
    else if ('B' == ret) {
        printf("BoBo wins!\n");
    }
    else {
        printf("No winner!\n");
    }
    
    return 0;
}
发表于 2022-01-04 11:48:47 回复(0)
l = []
for _ in range(3):
    l.append(input().split(' '))
win = 0
for i in range(3):
    if l[i] == ['K', 'K', 'K']:
        print('KiKi wins!')
        win = 1
        break
    if l[i] == ['B', 'B', 'B']:
        print('BoBo wins!')
        win = 1
        break
for i in range(3):
    if l[0][i]=='K' and l[1][i]=='K' and l[2][i]=='K':
        print('KiKi wins!')
        win = 1
        break
    if l[0][i]=='B' and l[1][i]=='B' and l[2][i]=='B':
        print('BoBo wins!')
        win = 1
        break
if l[0][0]=='K' and l[1][1]=='K' and l[2][2]=='K':
    print('KiKi wins!')
    win = 1
if l[0][0]=='B' and l[1][1]=='B' and l[2][2]=='B':
    print('BoBo wins!')
    win = 1
if l[0][2]=='K' and l[1][1]=='K' and l[2][0]=='K':
    print('KiKi wins!')
    win = 1
if l[0][2]=='B' and l[1][1]=='B' and l[2][0]=='B':
    print('BoBo wins!')
    win = 1
if win==0:
    print('No winner!')
我还以为有什么聪明取巧的方法呢,没想到大家都一样哈哈哈,简单粗暴
发表于 2021-10-27 21:58:06 回复(0)
#include <stdio.h>

int main ()
{
    char arr[3][3] = {0};
    int i = 0, j = 0;
    for(i=0; i<3; i++)
    {
        for(j=0; j<3;j++)
        {
            scanf(" %c", &arr[i][j]);
            //%c前面加空格,后面就不用加getchar()
        }
    }
    
    char flag = 'O';
    for(i=0; i<3; i++)
    {
        if(arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2])
            //判断行是否一样,要是前面就相同那可以直接break,后面可以不用再判断了
        {
            flag = arr[i][1];
            break;
        }
        else if(arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i])
            //判断列是否一样,要是前面就相同那可以直接break,后面可以不用再判断了
        {
            flag = arr[1][i];
            break;
        }
    }
    if((arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2]) || 
       (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0]))
        //判断两斜边是否一样
    {
        flag = arr[1][1];
    }
    
    //前面判断有一条成立的话,那么flag的值就是'K'或者'B'
    if(flag == 'K')
        printf("KiKi wins!\n");
    else if(flag == 'B')
        printf("BoBo wins!\n");
    else
        printf("No winner!\n");
    return 0;
}

发表于 2021-10-25 04:24:50 回复(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;
}

发表于 2024-01-24 23:33:31 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    int flage = 0;
    char arr[10] = { 0 };
    for (int i = 1; i < 10; i++)
    {
        scanf("%c", &arr[i]);
        if (arr[i] == ' '||arr[i]=='\n')
        {
            i--;
        }
    }
    for (int i = 1; i < 10; i++)
    {
        if (arr[i] == 'K')
        {
            a = i;
            break;
        }
    }
    switch (a)
    {
    case 1:
        if (arr[2] == 'K' && arr[3] == 'K')
        {
            flage = 1;
        }
        if (arr[4] == 'K' && arr[7] == 'K')
        {
            flage = 1;
        }
        if (arr[5] == 'K' && arr[9] == 'K')
        {
            flage = 1;
        }
        break;
    case 2:
        if (arr[5] == 'K' && arr[8] == 'K')
        {
            flage = 1;
        }
        break;
    case 3:
        if (arr[6] == 'K' && arr[9] == 'K')
        {
            flage = 1;
        }
        if (arr[5] == 'K' && arr[7] == 'K')
        {
            flage = 1;
        }
        break;
    case 4:
        if (arr[5] == 'K' && arr[6] == 'K')
        {
            flage = 1;
        }
        break;
    case 7:
        if (arr[8] == 'K' && arr[9] == 'K')
        {
            flage = 1;
        }
        break;
    }
    if (flage == 1)
    {
        printf("KiKi wins!");
    }
    else
    {
        for (int i = 1; i < 10; i++)
        {
            if (arr[i] == 'B')
            {
                b = i;
                break;
            }
        }
        switch (b)
        {
        case 1:
            if (arr[2] == 'B' && arr[3] == 'B')
            {
                flage = 1;
            }
            if (arr[4] == 'B' && arr[7] == 'B')
            {
                flage = 1;
            }
            if (arr[5] == 'B' && arr[9] == 'B')
            {
                flage = 1;
            }
            break;
        case 2:
            if (arr[5] == 'B' && arr[8] == 'B')
            {
                flage = 1;
            }
            break;
        case 3:
            if (arr[6] == 'B' && arr[9] == 'B')
            {
                flage = 1;
            }
            if (arr[5] == 'B' && arr[7] == 'B')
            {
                flage = 1;
            }
            break;
        case 4:
            if (arr[5] == 'B' && arr[6] == 'B')
            {
                flage = 1;
            }
            break;
        case 7:
            if (arr[8] == 'B' && arr[9] == 'B')
            {
                flage = 1;
            }
            break;
        }
        if (flage == 1)
        {
            printf("BoBo wins!");
        }
        else
        {
            printf("No winner!");
        }
    }
    return 0;
}
编辑于 2024-01-04 15:46:45 回复(2)