题解 | #雀魂启动!#

雀魂启动!

https://www.nowcoder.com/practice/448127caa21e462f9c9755589a8f2416

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool ishu(vector<int> nums)
{
    if (nums.size() == 0) return true;
    int countFirst = count(nums.begin(), nums.end(), nums[0]);

    if (nums.size() % 3 != 0 && countFirst >= 2)
    {
        vector<int> newNum(nums.begin() + 2, nums.end());
        if (ishu(newNum)) return true;
    }

    if (countFirst >= 3)
    {
        vector<int> newNum(nums.begin() + 3, nums.end());
        if (ishu(newNum)) return true;
    }

    if (
        count(nums.begin(), nums.end(), nums[0] + 1) > 0 && \
        count(nums.begin(), nums.end(), nums[0] + 2) > 0
        )
    {
        vector<int> newNum(nums.begin() + 1, nums.end());
        newNum.erase(find(newNum.begin(), newNum.end(), nums[0] + 1));
        newNum.erase(find(newNum.begin(), newNum.end(), nums[0] + 2));
        if (ishu(newNum)) return true;
    }
    return false;
}

bool hupai(vector<int> nums, int n)
{
    if (count(nums.begin(), nums.end(), n) == 4) return false;
    nums.push_back(n);
    sort(nums.begin(), nums.end());
    return ishu(nums);
}

int main() {
    vector<int> res;
    vector<int> num(13, 0);
    for (int i = 0; i < num.size(); ++i)
    {
        int v;
        cin >> v;
        num[i] = v;
    }

    for (int i = 1; i <= 9; ++i)
    {
        if (hupai(num, i))
            res.push_back(i);
    }
    if (res.size() == 0)
    {
        cout << 0;
    }
    else 
    {
        for (auto& c : res)
        {
            cout << c << " ";
        }
    }

    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务