学校选拔篮球队员,每间宿舍最多有4个人。现给出宿舍列表,请找出每个宿舍最高的同学。定义一个学生类Student,有身高height,体重weight等。
输入格式:
首先输入一个整型数n (1<=n<=1000000),表示n位同学。
紧跟着n行输入,每一行格式为:宿舍号,name,height,weight。
宿舍号的区间为[0,999999], name 由字母组成,长度小于16,height,weight为正整数。
输出格式:
按宿舍号从小到大排序,输出每间宿舍身高最高的同学信息。题目保证每间宿舍只有一位身高最高的同学。
输入样例:
7
000000 Tom 175 120
000001 Jack 180 130
000001 Hale 160 140
000000 Marry 160 120
000000 Jerry 165 110
000003 ETAF 183 145
000001 Mickey 170 115
输出样例:
000000 Tom 175 120
000001 Jack 180 130
000003 ETAF 183 145
方法一:C++map实现
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<set>
#include<cstring>
#include<vector>
using namespace std;
int main ()
{
int n;
string t1;
int m,m1,t;
map<int,string>s1;
map<int,int>s2,s3;
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++){
cin>>t>>t1>>m>>m1;
if(m>s2[t]){
s1[t]=t1;
s2[t]=m;
s3[t]=m1;
// cout<<t<<' '<<t1<<' '<<m<<' '<<m1<<'\n';
}
}
for(map<int,string> ::iterator it=s1.begin();it!=s1.end();it++){
printf("%06d ",it->first);
cout<<it->second<<' '<<s2[it->first]<<' '<<s3[it->first]<<"\n";
}
return 0;
}
方法二:C语言结构实现
#include<stdio.h>
#include<string.h>
struct AA{
int fang;
char name[21];
int shen;
int ti;
}a[10011],t;
int main (void)
{
int n,i;
for(i=0;i<=10010;i++){
a[i].fang=i;
a[i].shen=0;
a[i].ti=0;
}
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d %s %d %d",&t.fang,t.name,&t.shen,&t.ti);
if(t.shen>a[t.fang].shen){
a[t.fang].shen=t.shen;
a[t.fang].ti=t.ti;
strcpy(a[t.fang].name,t.name);
}
}
for(i=0;i<=10010;i++){
if(a[i].shen!=0)
printf("%06d %s %d %d\n",a[i].fang,a[i].name,a[i].shen,a[i].ti);
}
return 0;
}