这道题其实很简单,对于读入数据的条数,题目只说了n>0,试了一下做一个一万的数组就满分了,不存在之前写1002的时候有很大的数据。解法上要么直接用结构体和数组来做,要么直接定义变量也能写。其实这两种解法蕴含着两种不同的思维方式。对于用变量来做,只需要提前定义一个最大值和最小值,在输入数据不断与最值进行比较,更新最值,最后就能得结果,他不需要储存数据,用完就丢弃。而如果用结构体的话,可以先定义个结构体数组,记下最值的位置,最后在数组中用哪个位置来输出。像这种只有三个成员用不用结构体都无所谓,代码的简洁性上没有什么区别。下面给出两种代码。
注意下面的只能写if和if不能写if-else if,自己想想为什么。
1.定义变量
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
cin >> n;
string min_name, min_number, max_name, max_number,name,number;
int min_score=101, max_score=-1,score; //保证只要输入合法的0-100的分数,min和max都可以更新
for (int i = 0; i < n; i++)
{
cin >> name >> number >> score; //将当前的三个信息输入
if (score < min_score)
{
min_name = name;
min_number = number;
min_score = score;
}
if (score > max_score)
{
max_name = name;
max_number = number;
max_score = score;
}
}
cout << max_name << " " << max_number << endl;
cout << min_name << " " << min_number<<endl;
return 0;
}
2.结构体
#include<iostream>
#include<string>
using namespace std;
struct student
{
string name, number;
int score;
};
int main()
{
student s[10000];
int n,max=-1,min=101,max_position,min_position;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> s[i].name >> s[i].number >> s[i].score;
if (s[i].score > max)
{
max = s[i].score;
max_position = i;
}
if (s[i].score < min)
{
min = s[i].score;
min_position = i;
}
}
cout << s[max_position].name << " " << s[max_position].number<<endl;
cout << s[min_position].name << " " << s[min_position].number << endl;
return 0;
}