hdu-1862 EXCEL排序
阿新 • • 發佈:2017-06-09
php 成績 printf total truct acm 通過 cep 數字
行,每行包含一條學生紀錄。每條學生紀錄由學號(6位數字,同組測試中沒有重復的學號)、姓名(不超過8位且不包含空格的字符串)、成績(閉區間[0, 100]內的整數)組成,每個項目間用1個空格隔開。當讀到 N=0 時,全部輸入結束,相應的結果不要輸出。
Output
對每個測試用例,首先輸出1行“Case i:”,其中 i 是測試用例的編號(從1開始)。隨後在 N 行中輸出按要求排序後的結果,即:當 C=1 時,按學號遞增排序;當 C=2時,按姓名的非遞減字典序排序;當 C=3
時,按成績的非遞減排序。當若幹學生具有相同姓名或者相同成績時,則按他們的學號遞增排序。
Sample Output
Case 1:
000001 Zoe 60
000007 James 85
000010 Amy 90
Case 2:
000010 Amy 90
000002 James 98
000007 James 85
000001 Zoe 60
Case 3:
000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90
題目鏈接:
http://acm.hdu.edu.cn/showproblem.php?pid=1862
題目類型:
模擬-結構體排序
題意概括:
給出N個人的學號,名字,成績,通過不同的順序進行不同的排序:
第一種排序:按學號遞增排序
第二種排序:按姓名的非遞減字典序排序
第三種排序:按成績的非遞減排序。當若幹學生具有相同姓名或者相同成績時,則按他們的學號遞增排序。
解題思路:
通過結構體將所有人的信息儲存起來,然後通過不同的排序方法,寫出不同的cmp函數,然後在sort一波輸出即可。
題目:
EXCEL排序
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 19453 Accepted Submission(s): 7176
Input 測試輸入包含若幹測試用例。每個測試用例的第1行包含兩個整數 N (<=100000) 和 C,其中 N 是紀錄的條數,C 是指定排序的列號。以下有 N
行,每行包含一條學生紀錄。每條學生紀錄由學號(6位數字,同組測試中沒有重復的學號)、姓名(不超過8位且不包含空格的字符串)、成績(閉區間[0, 100]內的整數)組成,每個項目間用1個空格隔開。當讀到 N=0 時,全部輸入結束,相應的結果不要輸出。
時,按成績的非遞減排序。當若幹學生具有相同姓名或者相同成績時,則按他們的學號遞增排序。
Sample Input 3 1 000007 James 85 000010 Amy 90 000001 Zoe 60 4 2 000007 James 85 000010 Amy 90 000001 Zoe 60 000002 James 98 4 3 000007 James 85 000010 Amy 90 000001 Zoe 60 000002 James 90 0 0
# include <stdio.h> # include <string.h> # include <algorithm> using namespace std; struct student{ int id; char name[20]; int score; }s[100010]; int cmp1(student a,student b) { if(a.id<b.id) return 1; return 0; } int cmp2(student a,student b) { if(strcmp(a.name,b.name)<0) return 1; else if(strcmp(a.name,b.name)==0 && a.id<b.id) return 1; return 0; } int cmp3(student a,student b) { if(a.score<b.score) return 1; else if(a.score==b.score && a.id<b.id) return 1; return 0; } int main () { int n,c,i,num=0; while(scanf("%d%d",&n,&c),n) { num++; for(i=0;i<n;i++) scanf("%d %s %d",&s[i].id,s[i].name,&s[i].score); if(c==1) sort(s,s+n,cmp1); else if(c==2) sort(s,s+n,cmp2); else if(c==3) sort(s,s+n,cmp3); printf("Case %d:\n",num); for(i=0;i<n;i++) printf("%06d %s %d\n",s[i].id,s[i].name,s[i].score); } return 0; }
hdu-1862 EXCEL排序