1178:成績排序
時間限制: 1000 ms 內存限制: 65536 KB
提交數: 17971 通過數: 7139
【題目描述】
給出班里某門課程的成績單,請你按成績從高到低對成績單排序輸出,如果有相同分數則名字字典序小的在前。
【輸入】
第一行為n (0 < n < 20),表示班里的學生數目;
接下來的n行,每行為每個學生的名字和他的成績, 中間用單個空格隔開。名字只包含字母且長度不超過20,成績為一個不大於100的非負整數。
【輸出】
把成績單按分數從高到低的順序進行排序並輸出,每行包含名字和分數兩項,之間有一個空格。
【輸入樣例】
4 Kitty 80 Hanmeimei 90 Joey 92 Tim 28
【輸出樣例】
Joey 92 Hanmeimei 90 Kitty 80 Tim 28
源代碼
#include<iostream> #include<cstdio> #include<algorithm> #include<math.h> #include<cstring> #include<stdio.h> using namespace std; struct node { char name[30]; int score; } stu[30]; int main(void) { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>stu[i].name>>stu[i].score; } for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { if(stu[i].score<=stu[j].score) swap(stu[i],stu[j]); } } for(int i=1;i<=n;i++) { for(int j=i;j<=n;j++) { if((stu[i].score==stu[j].score)&&strcmp(stu[i].name,stu[j].name)>0) { swap(stu[i],stu[j]); } } } for(int i=1;i<=n;i++) { cout<<stu[i].name<<" "<<stu[i].score<<endl; } return 0; }
這道題中,用到了struct自定義混合數據類型的操作。
1.在輸入的時候需要將定義的數據依次用 ”stu[i].數據名” 來輸入;
2.在運算比較的時候也需要依次調用;
3.輸出方式同輸入方式;
4.定義時struct可以單獨聲明,也可以用typeof 來聲明struct型混合變量;
5.要用到<stdio.h>頭文件。
6.在struct中,不僅可以聲明成員變量,還可以聲明成員函數 —— ——(C++語言比C語言優化部分)