1004 成績排名——C++實現
阿新 • • 發佈:2018-11-24
題目
1004 成績排名 (20 point(s))
讀入 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 <string> using namespace std; int main(){ int n,max=-1,min=101,score; cin>>n; string maxname,minname,maxid,minid,name,id; for(int i=0;i<n;i++){ cin>>name>>id>>score; if(max<score){ max=score; maxname=name; maxid=id; } if(min>score){ min=score; minname=name; minid=id; } } cout<<maxname<<" "<<maxid<<endl; cout<<minname<<" "<<minid<<endl; return 0; }
這是以前的程式碼,C的字元陣列還是比較麻煩……
//pat 1004 #include <iostream> #include <cstring> using namespace std; int main(){ int i; int n; //the students's num of input cin>>n; int score; int max=0,min=100; char Name[11],StuID[11]; //save stu's name and ID char MaxName[11],MaxStuID[11]; char MinName[11],MinStuID[11]; for(i=0;i<n;i++){ cin>>Name; cin>>StuID; cin>>score; if(score>max){ max=score; memcpy(MaxName,Name,sizeof(Name)); memcpy(MaxStuID,StuID,sizeof(StuID)); } if(score<min){ min=score; memcpy(MinName,Name,sizeof(Name)); memcpy(MinStuID,StuID,sizeof(StuID)); } } cout<<MaxName<<" "<<MaxStuID<<endl; cout<<MinName<<" "<<MinStuID; return 0; }