1004 成绩排名

1004 成绩排名
这道题其实很简单,对于读入数据的条数,题目只说了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;

}