题解 | #雀魂启动!#
雀魂启动!
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")