2014年蓝桥杯省赛A组 1.扑克序列 知识点:全排列

45 阅读1分钟

1.扑克序列 - 蓝桥云课 (lanqiao.cn)

这道题的做法就是全排列+check(),全排列可以用next_permution(),至于chek()函数我们可以看题目要求:

image.png

我们可以利用两个数之间的距离是否为3 (两个2之间有2张牌)

两个位置的距离是否为4 (两个3之间有3张牌)

两个位置之间距离是否为5 (两个4之间有4张牌)

从而来判断是否满足条件。

我们可以check()一部分,另一部分用眼睛去看,如果结果数量太多那就把chek()写完整一点。

#include <bits/stdc++.h>
using namespace std;

bool check(string& s)
{
    if (s.rfind('A') - s.find('A') == 2 &&
        s.rfind('2') - s.find('2') == 3 &&
        s.rfind('3') - s.find('3') == 4 &&
        s.rfind('4') - s.find('4') == 5
        )
        return true;
    return false;
}
int main()
{
    cin.tie(nullptr)->sync_with_stdio(false);
    string s = "223344AA";  //按字典序来 不然还要写排序

    do
    {
        if (check(s))
            cout << s << endl;

    } while (next_permutation(s.begin(), s.end()));
    return 0;
}

image.png

经过观察发现符合要求有两个答案,其中2342A3A4的字典序较小,即正确答案: image.png