社区讨论

80,哪错了求调

P1838三子棋I参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mlw1cp57
此快照首次捕获于
2026/02/21 16:07
3 周前
此快照最后确认于
2026/02/23 21:20
3 周前
查看原帖

80,哪错了求调

脑抽看不出哪错了
CPP
#include <iostream>
#include <string>
using namespace std;
int hang[10] = {0, 1, 1, 1, 2, 2, 2, 3, 3, 3};
int lie[10]  = {0, 1, 2, 3, 1, 2, 3, 1, 2, 3};
int diag[10] = {0, 1, 0, 2, 0, 1, 0, 2, 0, 1};

int cnt[2][9] = {0};

bool check_win(int player) {
    for (int i = 1; i <= 3; i++) {
        if (cnt[player][i] == 3 || cnt[player][i+3] == 3) {
            return true;
        }
    }
    
    if (cnt[player][7] == 3 || cnt[player][8] == 3) {
        return true;
    }
    return false;
}

int main() {
    string s;
    cin >> s;
    int len = s.size();
    bool has_winner = false;

    for (int i = 0; i < len; i++) {
        if (has_winner) break;

        int pos = s[i] - '0';
        int player = i % 2;

        cnt[player][hang[pos]]++;
        cnt[player][lie[pos] + 3]++;
        
        if (diag[pos] == 1) {
            cnt[player][7]++;
        } else if (diag[pos] == 2) {
            cnt[player][8]++;
        }

        if (check_win(player)) {
            has_winner = true;
            if (player == 0) {
                cout << "xiaoa wins." << endl;
            } else {
                cout << "uim wins." << endl;
            }
        }
    }

    if (!has_winner) {
        cout << "drew." << endl;
    }

    return 0;
}
所以哪错了???
##错误样例: 输入:123456897 输出:xiaoa wins.

回复

3 条回复,欢迎继续交流。

正在加载回复...