当小和尚排完名单后,老和尚突然一拍脑袋:“导员把每个人的人名都给我了,可我忘记告诉你了。”好吧……我们可怜的小和尚看来要费二遍事了(好像之前的任务都是你帮他做的,好吧,你真可怜)
Input
输入数据为多组,输入的第一行为和尚的人数N,可以得到奖学金的人数M,和需要补考的人数O(在这里可以满足M+O<=N,即得到奖学金的和尚一定不用参加补考)。之后的N行每行都有一个字符串(即为和尚的名字,长度小于100)和尚考试的总分a[i](0 <= a[i] <= 1000)。
Output
前M行,每行是获得奖学金的小和尚的名字; 后O行,每行是补考的小和尚的名字; 由于老和尚觉得很对不起小和尚,所以他决定这次简单些,所以无论是奖励还是惩罚都按照总成绩从低到高输出和尚的名字即可。
Sample Input
5 1 2 a 192 aa 212 ab 351 bab 128 bbaa 654
Sample Output
bbaa bab ad 代码如下:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef struct{
char name[105];
int grade;
}student;
bool cmp(student a,student b)
{
return a.grade<b.grade;
}
student p[1000];
int main()
{ int n,i,j,t,front,end;
while(cin>>n>>front>>end)
{for(i=0;i<n;i++)
{
cin>>p[i].name;
cin>>p[i].grade;
}
sort(p,p+n,cmp);
for(i=n-1;i>n-front-1;i--)
{
cout<<p[i].name<<endl;
}
for(i=0;i<end;i++)
{
cout<<p[i].name<<endl;
}
}
return 0;
}
代码解释:
定义一个student结构体,然后根据成绩sort()排序,并输出得到奖学金和补考学生的名单