#include <iostream> #include <vector> #include <algorithm> #include <sstream> using namespace std; bool isValidSet(int a, int b, int c) { return (a == b && b == c) || (a + 1 == b && b + 1 == c); } string checkHu(vector<int>& nums) { int n = nums.size(); if (n % 3 != 2) { return "XIANGGONG"; } sort(nums.begin(), nums.end()); for (int i = 0; i < n - 5; i += 3) { if (!isValidSet(nums[i], nums[i + 1], nums[i + 2])) { return "BUHU"; } } if (nums[n - 2] != nums[n - 1]) { return "BUHU"; } return "HU"; } int main() { vector<int> nums; string line; string result; while (true) { getline(cin, line); if (line == "0") { break; } stringstream ss(line); int num; while (ss >> num) { nums.push_back(num); } result = checkHu(nums); cout << result << endl; nums.clear(); } return 0; }如何加以定义个数字的数量不超过4个,集合中元素的数量不超过14个
时间: 2024-02-14 15:13:35 浏览: 118
可以在读入每一行的数字后,统计每个数字出现的次数,如果有任何一个数字的出现次数超过了4次,直接返回"BUHU";同时,如果集合中元素的数量超过了14个,也直接返回"BUHU"。代码如下:
```
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <unordered_map> // 添加头文件以使用 unordered_map
using namespace std;
bool isValidSet(int a, int b, int c) {
return (a == b && b == c) || (a + 1 == b && b + 1 == c);
}
string checkHu(vector<int>& nums) {
int n = nums.size();
if (n % 3 != 2) {
return "XIANGGONG";
}
// 使用 unordered_map 统计数字出现次数
unordered_map<int, int> count;
for (int num : nums) {
count[num]++;
if (count[num] > 4) {
return "BUHU";
}
}
if (count.size() > 14) { // 判断集合中元素数量是否超过14个
return "BUHU";
}
sort(nums.begin(), nums.end());
for (int i = 0; i < n - 5; i += 3) {
if (!isValidSet(nums[i], nums[i + 1], nums[i + 2])) {
return "BUHU";
}
}
if (nums[n - 2] != nums[n - 1]) {
return "BUHU";
}
return "HU";
}
int main() {
vector<int> nums;
string line;
string result;
while (true) {
getline(cin, line);
if (line == "0") {
break;
}
stringstream ss(line);
int num;
while (ss >> num) {
nums.push_back(num);
}
result = checkHu(nums);
cout << result << endl;
nums.clear();
}
return 0;
}
```
阅读全文