当前位置: 代码迷 >> 综合 >> (map)7-8?宿舍谁最高??(25?分)
  详细解决方案

(map)7-8?宿舍谁最高??(25?分)

热度:34   发布时间:2023-11-02 19:17:37.0

7-8 宿舍谁最高? (25 分)

学校选拔篮球队员,每间宿舍最多有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

感悟: 总的解题思路是对的,注意宿舍编号六位,字符串输入的话注意补齐,整型存储的话,输出的话注意控制格式。

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
const int maxn=25;
typedef struct Node{char name[20];int h,w;
}student;
string id,t;int main(){int n;cin>>n;getchar();set<string> s;map<string,student> mp;student tmp,p;for(int i=0;i<n;i++){id="";cin>>t;for(int i=0;i<6-t.length();i++){id+='0';}id+=t;cin>>tmp.name>>tmp.h>>tmp.w;if(s.find(id)==s.end()){mp[id]=tmp;}else{p=mp[id];if(p.h<tmp.h) mp[id]=tmp;}s.insert(id);}set<string> ::iterator it;for(it=s.begin();it!=s.end();it++){string t=*it;cout<<t<<" "<<mp[t].name<<" "<<mp[t].h<<" "<<mp[t].w<<endl;}return 0;
}

另一种写法:

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
const int maxn=25;
typedef struct Node{char name[20];int h,w;Node(){h=0;w=0;}
}student;int main(){int n,id;cin>>n;getchar();map<int,student> mp;student tmp;for(int i=0;i<n;i++){cin>>id;cin>>tmp.name>>tmp.h>>tmp.w;if(mp[id].h<tmp.h) mp[id]=tmp;}map<int,student> ::iterator it;for(it=mp.begin();it!=mp.end();it++){int t=it->first;printf("%06d",t);cout<<" "<<mp[t].name<<" "<<mp[t].h<<" "<<mp[t].w<<endl;//cout<<" "<<(it->second).name<<" "<<(it->second).h<<" "<<(it->second).w<<endl;}return 0;
}

 

 

  相关解决方案