题目描述:
王者荣耀是现在比较火的手机游戏,游戏中有70个英雄可供玩家挑选,玩家可以用这70个英雄参加排位赛提升段位。而刚玩这个游戏的鲸鱼学姐想提升到白金段位,但是她靠自己单独排位很难上分,于是她求助了另外几个学长,另外的学长也答应帮她,但是他们需要趁手的英雄,另外几个学长把他们想玩的英雄的编号告诉了鲸鱼学姐,鲸鱼学姐要根据他们给出的编号挑出五个需求量最大的英雄。然而,学姐要练车,没有时间来统计,于是他找到了plyjdz,然而比较懒的plyjdz(其实就是皮卡丘啦),想把这个任务交给学弟学妹们。
输入:
学长们给出了很多套不同方案。(方案不超过100套)
每套方案有不超过m个英雄的编号x,编号间以空格隔开,每套方案以0为结束的标志。(5<=m<=1000,1<=x<=70)
保证输入数据合法
保证输入至少有一套方案
输出:
样例输入
1 2 3 4 5 0
1 1 2 3 4 5 6 6 0
5 5 4 1 1 2 3 2 1 4 6 6 7 8 0
15 45 12 54 45 12 45 8 48 12 45 48 45 41 2 45 48 65 23 11 25 23 16 14 15 18 19 20 12 15 1 23 45 48 12 45 54 12 45 48 45 14 41 45 48 65 23 11 25 23 16 14 15 15 15 15 15 15 0
样例输出
1 2 3 4 5
1 2 3 4 6
1 2 4 5 6
12 15 23 45 48
处理多组输入的问题,和以往的不同,每一组输入都以0结束,而且输入组数不定,需要构造一个函数来输入
#include <bits/stdc++.h>
using namespace std;
struct student
{
int id;
int num;
}stu[100];
int cmp(student x,student y)
{
if(x.num!=y.num)
return x.num>y.num;
else
return x.id<y.id;
}
int init()
{
for(int i=0;i<70;i++)
{
stu[i].id=i;
stu[i].num=0;
}
int v;
int flag=0;
while(~scanf("%d",&v)&&v)
{
flag=1;
stu[v].num++;
}
return flag;
}
int main()
{
int ans[5];
while(init())
{
sort(stu,stu+70,cmp);
for(int i=0;i<5;i++)
ans[i]=stu[i].id;
sort(ans,ans+5);
for(int i=0;i<4;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[4]);
}
return 0;
}
复习一下多组输入问题:
1.c语言eof结束输入
- #include <stdio.h>
- int main()
- {
- int a;
- while(~scanf("%d",&a))
- {
- printf("%d\n",a);
- }
- return 0;
- }
- #include <iostream>
- using namespace std;
- int main()
- {
- string a;
- while(cin>>a)
- {
- cout << a << endl;
- }
- return 0;
- }