首页 > 试题广场 >

井字棋

[编程题]井字棋
  • 热度指数:22455 时间限制: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 c;
    int a[3][3], i, j, sum = 0;
    int b[8];
    for(i = 0; i < 8; i++)          //先初始化
    {
        b[i] = 0;
    }
    for(i = 0; i < 3; i++)
    {
        for(j = 0; j < 3; j++)
        {
            scanf(" %c", &c);
            if(c == 'K')
                a[i][j] = 1;        //本来想试试能不能用矩阵算,发现用C写矩阵乘法函数挺麻烦
            else if (c == 'B')
                a[i][j] = -1;
            else
                a[i][j] = 0;
        }
    }
    for(i = 0; i < 3; i++)
    {
        for(j = 0; j < 3; j++)
        {
            b[i] += a[i][j];
            b[i + 3] += a[j][i];
        }
        b[6] += a[i][i];
        b[7] += a[i][2 - i];
    }
    for(i = 0; i < 8; i++)
    {
        b[i] /= 3;                  //因为b[i]绝对值不超过3,而+-3又是想要的结果,/3就把不想要的去了
        sum += b[i];                //题目应该不会出现同时赢的情况吧:)
    }
    if(!sum)
        printf("No winner!\n");
    else if(sum > 0)
        printf("KiKi wins!\n");
    else
        printf("BoBo wins!\n");
    return 0;
}
发表于 2025-05-07 01:40:27 回复(0)
#include <stdio.h>
int main() {
    char arr[3][3] = {0}, a = 'N';
    for (int i = 0; i < 3; i++) {
        scanf(" %c %c %c", &arr[i][0], &arr[i][1], &arr[i][2]);//录入矩阵
    }
    for (int i = 0; i < 3; i++) {
        if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2]) {//行比较
            if (arr[i][1] == 'K') {
                a = 'K';
            } else if (arr[i][1] == 'B') {
                a = 'B';
            }
        }
        if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i]) {//列比较
            if (arr[1][i] == 'K') {
                a = 'K';
            } else if (arr[1][i] == 'B') {
                a = 'B';
            }
        }
    }//X比较
    if ((arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2]) ||
            (arr[2][0] == arr[1][1] && arr[1][1] == arr[0][2])) {
        if (arr[1][1] == 'K') {
            a = 'K';
        } else if (arr[1][1] == 'B') {
            a = 'B';
        }
    }
    if (a == 'B') {//打印
        printf("BoBo wins!\n");
    } else if (a == 'K') {
        printf("KiKi wins!\n");
    } else if (a == 'N') {
        printf("No winner!\n");
    }
    return 0;
}
发表于 2025-02-26 21:10:19 回复(0)
#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;
}

编辑于 2024-02-10 18:26:45 回复(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)
#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;
}

发表于 2023-11-30 00:23:41 回复(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;
}

发表于 2023-11-13 11:04:35 回复(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;
}

发表于 2023-08-22 21:52:29 回复(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吧
发表于 2022-08-23 12:16:06 回复(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>
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;
}

发表于 2022-07-05 11:41:45 回复(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;
}

发表于 2022-06-13 15:43:19 回复(2)
#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;
}

发表于 2022-05-11 00:30:08 回复(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;
}

发表于 2022-05-01 11:47:50 回复(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!");
}

发表于 2022-03-29 11:03:49 回复(0)
#include<stdio.h>
#include<math.h>
int main(void)
{
    char str[3][3];
    int i,j,flag1,flag2[3]={0};
    for(i=0;i<3;i++){
        flag1=0;
        for(j=0;j<3;j++){
            scanf("%c",&str[i][j]);
            getchar();
            if (str[i][j]=='K'){flag1++;flag2[j]+=1*pow(3,i);}
            else if(str[i][j]=='B'){flag1--;flag2[j]+=2*pow(3,i);}
            
        }
        if(flag1==3){printf("KiKi wins!");return 0;}
        if(flag1==-3){printf("BoBo wins!");return 0;}//横向三连
    }
    if(flag2[0]==13||flag2[1]==13||flag2[2]==13){printf("KiKi wins!");return 0;}
    if(flag2[0]==26||flag2[1]==26||flag2[2]==26){printf("BoBo wins!");return 0;}//竖向三连(三进制)
    if(str[1][1]=='O'){printf("No winner!");return 0;}
    else if(str[1][1]=='K')
    {
        if((str[0][0]=='K'&&str[2][2]=='K') || (str[0][2]=='K'&&str[2][0]=='K')){printf("KiKi wins!");return 0;}
    }
     else if(str[1][1]=='B')
    {
        if((str[0][0]=='B'&&str[2][2]=='B') || (str[0][2]=='B'&&str[2][0]=='B')){printf("BoBo wins!");return 0;}
    }//斜向三连
}
发表于 2022-03-07 22:27:21 回复(0)

因为固定了三行三列,所以穷举了赢的几种可能

#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;
}
发表于 2022-02-27 12:15:28 回复(0)
#include<stdio.h>//用一个最笨的思路555
int main()
{
    int i,j,k,b,z[9]={0},h1=0,h2=0,h3=0,s1=0,s2=0,s3=0,xz=0,xy=0;
    char a[9];
    for(i=0;i<9;i++)
    {
        scanf(" %c",&a[i]);
        if(a[i]=='K')
            z[i]=1;
        else if(a[i]=='B')
            z[i]=-1;
        else if(a[i]=='O')
            z[i]=0;
    }
    h1=z[0]+z[1]+z[2];
    h2=z[3]+z[4]+z[5];
    h3=z[6]+z[7]+z[8];
    s1=z[0]+z[3]+z[6];
    s2=z[1]+z[4]+z[7];
    s3=z[2]+z[5]+z[8];
    xz=z[2]+z[4]+z[6];
    xy=z[0]+z[4]+z[8];
    if(h1==3||h2==3||h3==3||s1==3||s2==3||s3==3||xz==3||xy==3)
        printf("KiKi wins!\n");
    else if(h1==-3||h2==-3||h3==-3||s1==-3||s2==-3||s3==-3||xz==-3||xy==-3)
        printf("BoBo wins!\n");
    else
        printf("No winner!\n");
    return 0;
}
发表于 2022-02-16 17:20:11 回复(0)
#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)