NEUQ 1798: 想上分的鲸鱼

题目描述:

王者荣耀是现在比较火的手机游戏,游戏中有70个英雄可供玩家挑选,玩家可以用这70个英雄参加排位赛提升段位。而刚玩这个游戏的鲸鱼学姐想提升到白金段位,但是她靠自己单独排位很难上分,于是她求助了另外几个学长,另外的学长也答应帮她,但是他们需要趁手的英雄,另外几个学长把他们想玩的英雄的编号告诉了鲸鱼学姐,鲸鱼学姐要根据他们给出的编号挑出五个需求量最大的英雄。然而,学姐要练车,没有时间来统计,于是他找到了plyjdz,然而比较懒的plyjdz(其实就是皮卡丘啦),想把这个任务交给学弟学妹们。

输入:

学长们给出了很多套不同方案。(方案不超过100套)

每套方案有不超过m个英雄的编号x,编号间以空格隔开,每套方案以0为结束的标志。(5<=m<=1000,1<=x<=70)

保证输入数据合法

保证输入至少有一套方案

输出:


每行输出一套方案所求出的最大需求量,按照数字的升序输出需求量最大的五个英雄的编号。

关于升序:

就是一串变量按照由小到大(数字)、由开始到结束(事件)由A到Z(字母)的顺序排列。

样例输入
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结束输入

  1. #include <stdio.h>  
  2. int main()  
  3. {  
  4.     int a;  
  5.     while(~scanf("%d",&a))  
  6.     {  
  7.         printf("%d\n",a);  
  8.     }  
  9.     return 0;  
  10. }  
2.c++ios流输入

  1. #include <iostream>  
  2. using namespace std;  
  3. int main()  
  4. {  
  5.     string a;  
  6.     while(cin>>a)  
  7.     {  
  8.         cout << a << endl;  
  9.     }  
  10.     return 0;  
  11. }  

猜你喜欢

转载自blog.csdn.net/hebau_pss/article/details/80158829
今日推荐