返回题解分享
讨论 / 题解分享/ 帖子详情

扑克序列(结果填空) - 题解

#include <bits/stdc++.h>

using namespace std;

int a[] = {1, 1, 2, 2, 3, 3, 4, 4};
int out[8];
bool ist[8], done;

bool check() {
    bool ist_[5];
    memset(ist_, false, sizeof ist_);
    for (int i = 0; i < 8; i ++) 
        if (!ist_[1] && out[i] == 1) {
            for (int j = i + 1; j < 8; j ++) {
                if (out[j] == 1) {
                    if (j - i - 1 != 1) return false;
                    ist[1] = true;
                    break;
                }
            }

        if (!ist_[2] && out[i] == 2) 
            for (int j = i + 1; j < 8; j ++) {
                if (out[j] == 2) {
                    if (j - i - 1 != 2) return false;
                    ist[2] = true;
                    break;
                }
            }

        if (!ist_[3] && out[i] == 3) 
            for (int j = i + 1; j < 8; j ++) {
                if (out[j] == 3) {
                    if (j - i - 1 != 3) return false;
                    ist[3] = true;
                    break;
                }
            }

        if (!ist_[4] && out[i] == 4) 
            for (int j = i + 1; j < 8; j ++) {
                if (out[j] == 4) {
                    if (j - i - 1 != 4) return false;
                    ist[4] = true;
                    break;
                }
            }
    }
    return true;
}
void dfs(int u) {
    if (done) return;
    if (u == 8) {
        if (check()) {
            for (int i = 0; i < 8; i ++) {
                if (out[i] == 1) cout << 'A';
                else cout << out[i];
            }
            puts("");
            done = true;
        }
        return;
    }

    for (int i = 0; i < 8; i ++) {
        if (!ist[i]) {
            ist[i] = true;
            out[u] = a[i];
            dfs(u + 1);
            ist[i] = false;
        }
    }
}

int main(void) {
    dfs(0);
    return 0;
}
0 回复 0 转发 1 喜欢 2 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!