描述
学校选拔篮球队员,每间宿舍最多有 4 个人。现给出宿舍列表,请找出每个宿舍最高的同学。定义一个学生类 Student,有身高 height,体重 weight 等。????????????????????????????????????????????????????????????????????????????????????????????????
主函数main()如下:????????????????????????????????????????????????????????????????????????????????????????????????
int main() {
int n, room, height, weight;
string name;
// Input
cin >> n;
Student students[n];
for (int i = 0; i < n; i++) {
cin >> room >> name >> height >> weight;
students[i].setData(room, name, height, weight);
}
// Calculate & Output
roomSort(students, n); // 按照学生的宿舍号从小到大排序
maxHeight(students, n); // 输出各个宿舍里最高的学生信息
return 0;
}
?输入
首先输入一个整型数?n?(1≤n≤10^6),表示有?n?位同学。????????????????????????????????????????????????????????????????????????????????????????????????
紧跟着?n?行输入,每一行格式为:宿舍号 name height weight 。
宿舍号 的区间为 [0, 999999],?name ?由字母组成,长度小于 16,height ,weight ?为正整数。????????????????????????????????????????????????????????????????????????????????????????????????
输出
按宿舍号从小到大排序,输出每间宿舍身高最高的同学信息。题目保证每间宿舍只有一位身高最高的同学。????????????????????????????????????????????????????????????????????????????????????????????????
注意宿舍号不足 6 位的,要按 6 位补齐前导 0。????????????????????????????????????????????????????????????????????????????????????????????????
输入输出示例
| 输入 | 输出 | 示例 1 | 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<algorithm>
#include<iomanip>
using namespace std;
class Student{
public:
int room,height,weight;
string name;
void setData(int r,string na,int hei,int wei){
this->room=r;
this->name=na;
this->height=hei;
this->weight=wei;
}
};
int zll[1000000];//初始化全为零,下表指宿舍号,内部值为身高。
int main()
{
int n, room, height, weight;
string name;
cin>>n;
Student d[n];
for(int i=0;i<n;i++){
cin >> room >> name >> height >> weight;//此处与类中函数成员用名相同,类中必须定为公有。
if(zll[room]<height){//找到相同下标(宿舍号)且比以往存的值大,则将其赋值给zll【】,更新数据。
zll[room]=height;
d[room].setData(room, name, height, weight);//不断更新赋值,将相同宿舍中身高最高的所有数据记录下来。
}
}
for(int i=0;i<n;i++){//现在的循环中,i指的就是宿舍号。为什么n不是1000000,因为测试中宿舍号小于n,写1000000也no problem。
if(zll[i]!=0){//若等于零说明该宿舍没有参与或不存在。
cout << setw(6) << setfill('0') << d[i].room;//因为每个宿舍号记录的是最高身高的所有数据,直接输出即可。
cout<<" "<<d[i].name<<" "<<d[i].height<<" "<<d[i].weight<<endl;
}
}
return 0;
}
|