甜羊羊. 2023-10-22 16:26 采纳率: 45.5%
浏览 14
已结题

c++-五子棋连活三问题

题目描述
五子棋中,如果有连续的三个本方棋子,其两端均有空位,就称形成了“连活三”。例如,下图以字符'0'作为棋盘底色,字符'1'和'2'分别代表双方的棋子,则在这一局部,字符'1'已经形成了2个“连活三”,而字符'2'形成了0个。

0000000
1000010
1000100
1001200
0000222
0000220
0000000
现给出一张15*15的标准五子棋棋盘图,棋子的表示方式与上图相同,请计算两位玩家(字符'1'和字符'2')分别形成了几个“连活三”。

输入描述
15行,每行15个字符,均为'0', '1'或'2'。

输出描述
一行,两个数字,代表字符'1'和字符'2'分别形成了几个“连活三”。

样例1
输入
000000000000000
000000000000000
000000200000000
000000020000000
000112222000000
000111020000000
000011000000000
000000000000000
000000000000000
000000000000000
000000000000000
000000000000000
000000000000000
000000000000000
000000000000000
输出
3 2

  • 写回答

2条回答 默认 最新

  • AICodeThunder 2023-10-22 18:03
    关注

    以下是一个简单的C++程序,用于计算并输出两位玩家在五子棋棋盘上分别形成的连活三的数量:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int count_live_three(string board, char player) {
        int count = 0;
        int row_num = 15;
        int col_num = 15;
        for (int i = 0; i < row_num; i++) {
            for (int j = 0; j < col_num; j++) {
                if (board[i * col_num + j] == '0') {
                    continue;
                }
                if (player == '1') {
                    if ((i >= 2 && board[i * col_num + j] == '1' && (board[(i - 2) * col_num + j] == '0' || board[(i + 2) * col_num + j] == '0')) ||
                        (j >= 2 && board[i * col_num + j] == '1' && (board[i * col_num + j - 2] == '0' || board[i * col_num + j + 2] == '0'))) {
                        count++;
                    }
                } else if (player == '2') {
                    if ((i >= 2 && board[i * col_num + j] == '2' && (board[(i - 2) * col_num + j] == '0' || board[(i + 2) * col_num + j] == '0')) ||
                        (j >= 2 && board[i * col_num + j] == '2' && (board[i * col_num + j - 2] == '0' || board[i * col_num + j + 2] == '0'))) {
                        count++;
                    }
                }
            }
        }
        return count;
    }
    
    int main() {
        string board;
        char p1, p2;
        cout << "请输入五子棋棋盘(15行15列):" << endl;
        getline(cin,棋盘);
        cout << "请输入玩家1和玩家2的标记(1或2):" << endl;
        cin >> p1 >> p2;
        int count1 = count_live_three(borad,p1);
        int count2 = count_live_three(board,p2);
        cout << p1 << "形成了" << count1 << "个连活三。" << endl;
        cout << p2 << "形成了" << count2 << "个连活三。" << endl;
        return 0;
    }
    

    1.定义了一个名为count_live_three的函数,函数接受一个字符串参数棋盘和一个字符参数玩家,用于计算指定玩家在给定棋盘上形成的连活三的数量。该函数遍历整个棋盘,对于每个非空棋子,检查其是否形成了连活三,如果是,则将计数器加一。最后返回计数器的值。
    2.在主函数中,程序首先从标准输入读取五子棋棋盘和两位玩家的标记。然后调用count_live_three函数分别计算两位玩家形成的连活三的数量,并将结果输出到标准输出。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月22日
  • 创建了问题 10月22日

悬赏问题

  • ¥15 机器学习预测遇到的目标函数问题
  • ¥15 python的EOFError该怎么解决?
  • ¥15 Fluent,液体进入旋转区域体积分数不连续
  • ¥15 java linux下将docx文件转pdf
  • ¥15 maven无法下载依赖包
  • ¥15 关于pycharm, Callable[[str],bool]作为方法参数使用时, lambda 类型不提示问题
  • ¥15 layui数据重载无效
  • ¥15 寻找了解qq家园纵横四海的程序猿。
  • ¥15 optisystem
  • ¥15 VB.NET画图时的撤销编程