1. 程式人生 > >1004 成績排名 (20 分)

1004 成績排名 (20 分)

讀入 n(>0)名學生的姓名、學號、成績,分別輸出成績最高和成績最低學生的姓名和學號。                                                     

輸入格式:

每個測試輸入包含 1 個測試用例,格式為:

第 1 行:正整數 n 第 2 行:第 1 個學生的姓名 學號 成績 第 3 行:第 2 個學生的姓名 學號 成績   ... ... ... 第 n+1 行:第 n 個學生的姓名 學號 成績  

其中姓名學號均為不超過 10 個字元的字串,成績為 0 到 100 之間的一個整數,這裡保證在一組測試用例中沒有兩個學生的成績是相同的。

輸出格式:

對每個測試用例輸出 2 行,第 1 行是成績最高學生的姓名和學號,第 2 行是成績最低學生的姓名和學號,字串間有 1 空格。

輸入樣例:

3 Joe Math990112 89 Mike CS991301 100 Mary EE990830 95

輸出樣例:

Mike CS991301 Joe Math990112

題意:

水題。用結構體的話非常方便,完全可以一邊輸入資訊的時候一邊比較,來找出最大成績和最小成績。

程式碼:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{
	char name[12];
	char no[12];
	int grade;
};
struct node student[100007];
int main()
{
	int n;
	scanf("%d",&n);
	int max=-1,min=101;
	int maxindex,minindex;  //最高成績的下標 最低成績的下標
	for(int i=0;i<n;i++)
	{
		scanf("%s%s%d",student[i].name,student[i].no,&student[i].grade);
		if(student[i].grade>max)
		{
			max=student[i].grade;
			maxindex=i;
		}
		if(student[i].grade<min)
		{
			min=student[i].grade;
			minindex=i;
		}
		getchar();
	}
	printf("%s %s\n",student[maxindex].name,student[maxindex].no);
	printf("%s %s\n",student[minindex].name,student[minindex].no);
	return 0;
}