PAT乙級真題1004. 成績排名 (20)(解題)


題目:

讀入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;
}
查看代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM