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
【思路】其實當時想有一個二維數組直接就將學生姓名和學號保存在一個數組裏面,但是題目要求輸入樣例中,姓名和學號之間有一個空格,如果用scanf("%s %d",student,&score); 當還在輸完姓名後按空格後 就進行第二個參數的輸入了,這樣學號就丟了。。。。。。 被迫用了兩個二維數組。我看了其他博客的有用結構體的。
#include<stdio.h>
int main()
{
char student[1000][12];//學生名字
char NO[1000][12];//學號
int score[1000];//分數
int num=0,i=0,score_max=0,score_min=0;//num:學生數,max:分數最大值,
int max_index=0,min_index=0;//最大/小值的index
scanf("%d", &num);
for(i=0;i<num;i++)
{
scanf("%s %s %d",student[i],NO[i],&score[i]);
if(i==0) {score_max=score[0];score_min=score[0];}
if(score_max<score[i])
{ score_max=score[i];
max_index=i;
}
if(score_min>score[i])
{
score_min=score[i];
min_index=i;
}
}
printf("%s %s\n",student[max_index],NO[max_index]);
printf("%s %s\n",student[min_index],NO[min_index]);
return 0;
}