編程每日刷題系列三(問題 C: EXCEL排序)
題目描述
Excel可以對一組紀(jì)錄按任意指定列排序?,F(xiàn)請你編寫程序?qū)崿F(xiàn)類似功能。
對每個測試用例,首先輸出1行“Case i:”,其中 i 是測試用例的編號(從1開始)。隨后在 N 行中輸出按要求排序后的結(jié)果,即:當(dāng) C=1 時,按學(xué)號遞增排序;當(dāng) C=2時,按姓名的非遞減字典序排序;當(dāng) C=3 時,按成績的非遞減排序。當(dāng)若干學(xué)生具有相同姓名或者相同成績時,則按他們的學(xué)號遞增排序。
輸入
測試輸入包含若干測試用例。每個測試用例的第1行包含兩個整數(shù) N (N<=100000) 和 C,其中 N 是紀(jì)錄的條數(shù),C 是指定排序的列號。以下有N行,每行包含一條學(xué)生紀(jì)錄。每條學(xué)生紀(jì)錄由學(xué)號(6位數(shù)字,同組測試中沒有重復(fù)的學(xué)號)、姓名(不超過8位且不包含空格的字符串)、成績(閉區(qū)間[0, 100]內(nèi)的整數(shù))組成,每個項目間用1個空格隔開。當(dāng)讀到 N=0 時,全部輸入結(jié)束,相應(yīng)的結(jié)果不要輸出。
輸出
對每個測試用例,首先輸出1行“Case i:”,其中 i 是測試用例的編號(從1開始)。隨后在 N 行中輸出按要求排序后的結(jié)果,即:當(dāng) C=1 時,按學(xué)號遞增排序;當(dāng) C=2時,按姓名的非遞減字典序排序;當(dāng) C=3 時,按成績的非遞減排序。當(dāng)若干學(xué)生具有相同姓名或者相同成績時,則按他們的學(xué)號遞增排序。
樣例輸入
樣例輸出
反面教材C++代碼:
樣例運(yùn)行結(jié)果:

上面這個代碼不嚴(yán)謹(jǐn),雖然樣例運(yùn)行結(jié)果符合題意。
不嚴(yán)謹(jǐn)在于題目說了,當(dāng)若干學(xué)生具有相同姓名或者相同成績時,則按他們的學(xué)號遞增排序。
所以函數(shù)cmp2需要完善一下,其實還有其他欠考慮的地方,比方說輸出到顯示屏的Case?i:中的i不是指的所選的排序方式1~3中的一個,而是隨著數(shù)據(jù)的輸入,i是不斷增加的
完善版的C++代碼:
另一個版本的C++代碼:
(由于我也不知道為什么完整的代碼無法在代碼塊中像上面那個正常完整的顯示出來,估計是B站的編輯器的Bug吧,所以我就把代碼放出來了,不裝到代碼塊里了
#include <stdio.h>
#include <string.h>
#include <algorithm>?
using namespace std;
struct student{
char num[10];
char name[10];
int score;
}stu[100010];
bool cmp1(student a,student b){
return strcmp(a.num,b.num )<0;
}
bool cmp2(student a,student b){
if(strcmp(a.name ,b.name )) return strcmp(a.name ,b.name )<0;
else return? strcmp(a.num,b.num )<0;
}
bool cmp3(student a,student b){
if(a.score !=b.score ) return a.score <b.score ;
else return? strcmp(a.num,b.num )<0;
}
int main(){
int m,n,count=0;
while(scanf("%d %d",&m,&n)!=EOF){
if(m==0) break;
int i;
for(i=0;i<m;i++){
scanf("%s %s %d",&stu[i].num ,&stu[i].name ,&stu[i].score );
}
switch(n){
case 1:sort(stu,stu+m,cmp1);break;
case 2:sort(stu,stu+m,cmp2);break;
case 3:sort(stu,stu+m,cmp3);break;
}
printf("Case %d:\n",++count);
for(i=0;i<m;i++){
printf("%s %s %d\n",stu[i].num ,stu[i].name ,stu[i].score );
}
}
return 0;
}
之后我會持續(xù)更新,如果喜歡我的文章,請記得一鍵三連哦,點贊關(guān)注收藏,你的每一個贊每一份關(guān)注每一次收藏都將是我前進(jìn)路上的無限動力 ?。。〃I(▔▽▔)↗感謝支持!