春节至,亲朋好友聚会忙,聚会之人有时会说到自己的生肖。对于给定的若干人的生肖,请统计各种生肖的人数,并按人数从多到少输出各种出现的生肖及其人数。若有多种生肖的人数相同,则按生肖英文单词(详见最后的提示)的字典顺序输出。输入:首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试先输入1 个整数n(1<=n<=100)表示聚会人数,再输入n个字符串(长度不超过7且仅包含小写字母),每个字符串表示一个人的生肖。输出:对于每组测试,按描述要求输出结果,每种出现的生肖及其人数占一行,每行的两个数据之间以一个空格间隔。每两组测试数据之间留一个空行。 提示:鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪等十二生肖相应的英文单词如下:rat、ox、tiger、rabbit、dragon、snake、horse、goat、monkey、rooster、dog、pig
时间: 2023-07-04 12:26:57 浏览: 288
测测你的生肖
这是一道很典型的统计题目,可以使用哈希表来统计每个生肖出现的次数。以下是 C++ 的代码实现:
```c++
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
map<string, int> count;
for (int i = 0; i < n; i++) {
string zodiac;
cin >> zodiac;
count[zodiac]++;
}
vector<pair<string, int>> result(count.begin(), count.end());
sort(result.begin(), result.end(), [](const pair<string, int>& a, const pair<string, int>& b){
if (a.second == b.second) {
return a.first < b.first;
} else {
return a.second > b.second;
}
});
for (auto& p : result) {
cout << p.first << " " << p.second << endl;
}
if (T > 0) {
cout << endl;
}
}
return 0;
}
```
在这段代码中,我们使用了 `map` 数据结构来统计每个生肖出现的次数。然后将 `map` 中的键值对转换为 `vector`,并且按照题目要求进行排序。最后输出结果即可。
阅读全文