求c++大神帮忙解一下这道题
英雄投票全世界各地都有很多超级英雄,哪些英雄人物最厉害呢?有好事之徒发起了一个全民投票,每人一票,需要选出k名最受欢迎的英雄人物。输入第一行为k,代表需要选出前k名最受欢...
英雄投票
全世界各地都有很多超级英雄,哪些英雄人物最厉害呢?有好事之徒发起了一个全民投票,
每人一票,需要选出 k 名最受欢迎的英雄人物。
输入第一行为 k,代表需要选出前 k 名最受欢迎的英雄人物。第二行为所有人的投票情况,
由得票的英雄人物名字组成,姓名都为小写字母,由空格隔开。共有多少投票无法提前知
晓。k<=100。输出共 k 行英雄姓名,以得票高低排序,得票相同时按字典序排序。
输入样例:
3
monkeyking captainamerica monkeyking doraemon superman magneto wolverine
optimusprime batman superman spiderman monkeyking
输出样例:
monkeyking
superman
batman 展开
全世界各地都有很多超级英雄,哪些英雄人物最厉害呢?有好事之徒发起了一个全民投票,
每人一票,需要选出 k 名最受欢迎的英雄人物。
输入第一行为 k,代表需要选出前 k 名最受欢迎的英雄人物。第二行为所有人的投票情况,
由得票的英雄人物名字组成,姓名都为小写字母,由空格隔开。共有多少投票无法提前知
晓。k<=100。输出共 k 行英雄姓名,以得票高低排序,得票相同时按字典序排序。
输入样例:
3
monkeyking captainamerica monkeyking doraemon superman magneto wolverine
optimusprime batman superman spiderman monkeyking
输出样例:
monkeyking
superman
batman 展开
1个回答
展开全部
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct
{
string name;
int score;
}Hero;
void getVote(const string& str, vector<Hero>& res)
{
int i = 0, j = 0;
int len = str.size();
while( i < len )
{
j = i;
while( i<len && str[i]!=' ' )
++i;
string s = str.substr(j, i-j);
++i; // 指向下一个单词的首字母
vector<Hero>::iterator it;
for(it = res.begin(); it != res.end(); ++it){
if( (*it).name == s ){
(*it).score++;
break;
}
}
if( it == res.end() ){
Hero t = {s,1};
res.push_back(t);
}
}
}
bool cmp(const Hero& s1, const Hero& s2)
{
if( s1.score != s2.score )
return s1.score > s2.score;
else
return s1.name < s2.name;
}
int main()
{
int k;
string vote;
vector<Hero> res;
(cin>>k).get(); //吃掉回车
getline(cin, vote);
getVote(vote, res);
sort(res.begin(), res.end(), cmp);
for(int i = 0; i < k; ++i)
cout << res[i].name << endl;
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询