題目:
讀入n名學生的姓名、學號、成績,分別輸出成績最高和成績最低學生的姓名和學號。
輸入格式:每個測試輸入包含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
我的理解:這道題理解起來還是比較容易,由於PAT的評分機制會嚴格按照它給定的格式評分,所以這題需要注意的一點是輸出的格式;
在算法的選擇上,我這里用的結構體數組,當然用動態鏈表也是能做,以后找時間加上;
code:

/******** 編譯環境 vc6.0(32位)****************/ /******** PAT評分通過 *******************/ #include<stdio.h> #include<string.h> struct MS //聲明結構體類型 { char name[11]; char num[11]; int grade; }; int main() { int n=0; int i=0; int min=0,max=0; int mindex=0; int maxdex=0; struct MS *stu; scanf("%d",&n); stu=(struct MS *)malloc(n*sizeof(struct MS)); for(i=0;i<n;i++) { scanf("%s %s %d",stu[i].name,stu[i].num,&stu[i].grade); } min=stu[0].grade; max=stu[0].grade; for(i=0;i<n;i++) { if(stu[i].grade<min) { min=stu[i].grade; mindex=i; } if(stu[i].grade>max) { max=stu[i].grade; maxdex=i; } } printf("%s %s\n",stu[maxdex].name,stu[maxdex].num); printf("%s %s\n",stu[mindex].name,stu[mindex].num); return 0; }