PATB1004:成绩排名 简单结构体的 + 数组 求最值
【参考答案1】
//B1004成绩排名; 常规思路 与节省空间思路
struct STU1{
string name;
string ID;
int score;
}stu1[1010];
void B1004(){
int N;
cin >> N;
int maxId = 0, minId=0;
for (int i = 0; i < N; i++)
{
cin >> stu1[i].name >> stu1[i].ID >> stu1[i].score;
if (stu1[maxId].score < stu1[i].score)
{
maxId = i;
}
if (stu1[minId].score > stu1[i].score)
{
minId = i;
}
}
cout << stu1[maxId].name <<" "<< stu1[maxId].ID << endl;
cout << stu1[minId].name << " " << stu1[minId].ID << endl;
}
【注意点】
相比于上面答案,只是开了temp maxStu minStu 的结构体
输入时候直接比较 temp.scor与 maxStu.score minStu.score 比较得到赋值给结构体
for (int i = 0; i < n; i++){
scanf("%s%s%d",s_temp.name,s_temp.id,&s_temp.score);
if (s_temp.score<s_min.score){
s_min = s_temp;//**关键点 直接对结构体进行赋值**
}
if (s_temp.score>s_max.score){
s_max = s_temp;
}
【参考答案2】
//重要,求最大值只需要,1max初始化,2for获取临时可变的对象
#include <cstdio>
//求结构体,s数组中某个属性的最值
const int length = 20;
struct STUD{
char name[length];
char id[length];
int score;
};
STUD s_temp,s_min,s_max;//声明三个学生,其中s_temp(可变的)用来scanf传输数据
//重要,求最大值只需要,1max初始化,2for获取临时可变的对象
void structmax(){
s_min.score = 101;//一定不是最小的数
s_max.score = -1;//一定不是最z最大的数,所以一定一开始就会进入判断语句
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++){
scanf("%s%s%d",s_temp.name,s_temp.id,&s_temp.score);
if (s_temp.score<s_min.score){
s_min = s_temp;//这里是直接把当前学生作为最大的学生,而非最大分数,不然无法得到其他相关联的如id
}
if (s_temp.score>s_max.score){
s_max = s_temp;
}
}
printf("%s %s\n", s_max.name, s_max.id);
printf("%s %s\n", s_min.name, s_min.id);
}