7-1 宿舍谁最高?
分数 30
作者 张栋
单位 福州大学
学校选拔篮球队员,每间宿舍最多有 4 个人。现给出宿舍列表,请找出每个宿舍最高的同学。定义一个学生类 Student,有身高 height,体重 weight 等。
输入格式:
首先输入一个整型数 n (1≤n≤10
6
),表示有 n 位同学。
紧跟着 n 行输入,每一行格式为:宿舍号 name height weight。
宿舍号的区间为 [0, 999999], name 由字母组成,长度小于 16,height,weight 为正整数。
输出格式:
按宿舍号从小到大排序,输出每间宿舍身高最高的同学信息。题目保证每间宿舍只有一位身高最高的同学。
注意宿舍号不足 6 位的,要按 6 位补齐前导 0。
输入样例:
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 <string>
using namespace std;
class Student
{
public:
int dorm;
string name;
int h, w;
Student(int a = 0, string n = "", int he = 0, int we = 0)
{
dorm = a;
name = n;
h = he;
w = we;
}
};
int main() {
int n = 0;
cin >> n;
Student* s = new Student[n];
for (int i = 0; i < n; i++)
{
int a, he, we;
string n;
cin >> a >> n >> he >> we;
s[i] = Student(a, n, he, we);
}//录入学生信息
if (n > 1)
{
for (int p = n; p > 0; p--)
{
for (int q = 0; q < p - 1; q++)
{
Student temp;
if (s[q].dorm > s[q + 1].dorm)
{
temp = s[q];
s[q] = s[q + 1];
s[q + 1] = temp;
}
}
}//将学生按宿舍号进行由小到大的排序
Student max; bool nd = true; int t = 0;
if (s[0].dorm != s[1].dorm)
{
printf("%06d ", s[0].dorm);
cout << s[0].name << " " << s[0].h << " " << s[0].w << "\n";
}
for (int r = 0; r < n - 1; r++)
{
if (s[r].dorm == s[r + 1].dorm)//有多个,进行宿舍内部比较
{
if (nd == true)//首次进入宿舍赋值
{
max = s[r];
nd = false;
}
if (max.h < s[r + 1].h)//比较出最高的学生记为max
{
max = s[r + 1];
}
if (s[r+1].dorm != s[r +2].dorm||r==n-2)//接下来就是下一个宿舍的话或者接下来没有宿舍了输出
{
nd = true;
printf("%06d ", max.dorm);
cout << max.name << " " << max.h << " " << max.w << "\n";
}
}
else if (s[r].dorm != s[r + 1].dorm && s[r].dorm != s[r - 1].dorm)//宿舍内单个人,无需比较,直接输出
{
max = s[r];
printf("%06d ", max.dorm);
cout << max.name << " " << max.h << " " << max.w << "\n";
}
}
if (s[n - 2].dorm != s[n - 1].dorm)
{
printf("%06d ", s[n - 1].dorm);
cout << s[n - 1].name << " " << s[n - 1].h << " " << s[n - 1].w << "\n";
}
}
return 0;
}
别处看到的两次排序方法(个人记录用)
#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
int dorm;
string name;
int h, w;
Student(int a = 0, string n = "", int he = 0, int we = 0)
{
dorm = a;
name = n;
h = he;
w = we;
}
};
int main() {
int n = 0,r=0;
cin >> n;
Student* s = new Student[n];
for (int i = 0; i < n; i++)
{
int a, he, we;
string n;
cin >> a >> n >> he >> we;
s[i] = Student(a, n, he, we);
}//录入学生信息
if (n > 1)
{
for (int p = n; p > 0; p--)
{
for (int q = 0; q < p - 1; q++)
{
Student temp;
if (s[q].dorm > s[q + 1].dorm)
{
temp = s[q];
s[q] = s[q + 1];
s[q + 1] = temp;
}
}
}//将学生按宿舍号进行由小到大的排序
for (; r < n - 1; )
{
if (s[r].dorm == s[r + 1].dorm)
{
if (s[r].h > s[r + 1].h)
{
Student temp1;
temp1 = s[r];
s[r] = s[r + 1];
s[r + 1] = temp1;
}//进行宿舍内按个子高低进行排序
r = r + 1;
}
else
{
printf("%06d ", s[r].dorm);
cout << s[r].name << " " << s[r].h << " " << s[r].w << "\n";
r = r + 1;
}
}
printf("%06d ", s[r].dorm);
cout << s[r].name << " " << s[r].h << " " << s[r].w << "\n";
}
else
{
printf("%06d ", s[0].dorm);
cout << s[0].name << " " << s[0].h << " " << s[0].w << "\n";
}
return 0;
}