pat 乙级 1004 成绩排名(C++)
生活随笔
收集整理的這篇文章主要介紹了
pat 乙级 1004 成绩排名(C++)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
讀入 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
分析
提供3種方法
- 首先,用3個數組分別存儲姓名,學號,和成績,下標一一對應。然后,用兩個變量來存儲最高成績與最低成績。最后,用這兩個變量去找對應的姓名與學號。注意輸出格式。
- 首先,用3個數組分別存儲姓名,學號,和成績,下標一一對應。然后對成績進行排序,同時交換對應的姓名和學號的順序。最后,輸出姓名和學號數組指定變量即可。
- 首先,用3個變量來接收姓名,學號和成績。然后,聲明6個變量分別表示姓名,學號,最高成績和姓名,學號,最低成績,把每一次讀入的n個學生成績拿來比對。
AC代碼
#include<iostream> #include<string> using namespace std; int main() {//方法1/*int i,j,n,max,min;cin>>n;string name[n],sno[n];int grade[n];for(i=0;i<n;i++){cin>>name[i]>>sno[i]>>grade[i];}max=grade[0];min=grade[0];for(i=1;i<n;i++){if(max<grade[i])max=grade[i];if(min>grade[i])min=grade[i];}for(i=0;i<n;i++){if(max==grade[i]){cout<<name[i]<<" "<<sno[i];cout<<endl;} }for(i=0;i<n;i++){if(min==grade[i])cout<<name[i]<<" "<<sno[i];}*///方法2/*for(i=0;i<n;i++)for(j=i+1;j<n;j++){if(grade[i]<grade[j]){int temp=grade[i];grade[i]=grade[j];grade[j]=temp;string temp2=name[i],temp3=sno[i];name[i]=name[j];sno[i]=sno[j];name[j]=temp2;sno[j]=temp3;} }cout<<name[0]<<" "<<sno[0]<<endl;cout<<name[n-1]<<" "<<sno[n-1];*/ //方法3int i,j,n,max=0,min=100;cin>>n;string max_name,min_name,max_sno,min_sno,name,sno;int grade;for(i=0;i<n;i++){cin>>name>>sno>>grade;if(max<grade){max=grade;max_name=name;max_sno=sno;}if(min>grade){min=grade;min_name=name;min_sno=sno;}}cout<<max_name<<" "<<max_sno<<endl;cout<<min_name<<" "<<min_sno;return 0; }比較
- 前兩種方法思路比較清楚,但需要開辟3個數組,消耗內存較大
- 第三種方法消耗內存不大,但是只能得到最高成績學生信息和最低成績學生信息,對于涉及整體學生的操作時,無能為力。
更多題解
pat 乙級 題解匯總(持續更新)(C++)
總結
以上是生活随笔為你收集整理的pat 乙级 1004 成绩排名(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知乎app如何看小说(知乎的知+是什么)
- 下一篇: 唯品会怎么联系客服(汉典唯字的基本解释)