7-5 宿舍谁最高? (20 分)

学校选拔篮球队员,每间宿舍最多有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;
}
发布了57 篇原创文章 · 获赞 69 · 访问量 6317

猜你喜欢

转载自blog.csdn.net/zp1455604302/article/details/102993513