信息学奥赛一本通(1178:成绩排序)——选择排序
1178:成績排序
時間限制: 1000 ms ??? ??? 內存限制: 65536 KB
提交數: 29458 ??? 通過數: 11916
【題目描述】
給出班里某門課程的成績單,請你按成績從高到低對成績單排序輸出,如果有相同分數則名字字典序小的在前。
【輸入】
第一行為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 <stdio.h>
#define N 25
struct node
{
?? ?char s[N];
?? ?int score;
}stu[N],t;
void chssort(struct node x[],int n)
{
?? ?int i,j,p;
?? ?for(i=0;i<n-1;i++)
?? ?{
?? ??? ?p=i;
?? ??? ?for(j=i+1;j<n;j++)
?? ??? ?{
?? ??? ??? ?if(x[j].score > x[p].score)
?? ??? ??? ?{
?? ??? ??? ??? ?p=j;
?? ??? ??? ?}
?? ??? ??? ?else if(stu[p].score == stu[j].score && strcmp(stu[p].s,stu[j].s)>0)
?? ??? ??? ?{
?? ??? ??? ??? ?p=j;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?if(p!=i)
?? ??? ?{
?? ??? ??? ?t=stu[p];
?? ??? ??? ?stu[p]=stu[i];
?? ??? ??? ?stu[i]=t;
?? ??? ?}
?? ?}
}
int main()
{
?? ?int i,n;
?? ?scanf("%d",&n);
?? ?for(i=0;i<n;i++)
?? ??? ?scanf("%s %d",&stu[i].s,&stu[i].score);
?? ?
?? ?chssort(stu,n);
?? ?
?? ?for(i=0;i<n;i++)
?? ??? ?printf("%s %d\n",stu[i].s,stu[i].score);
?? ?return 0;
}
http://ybt.ssoier.cn:8088/problem_show.php?pid=1178
?
總結
以上是生活随笔為你收集整理的信息学奥赛一本通(1178:成绩排序)——选择排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通 1082:求小数的某一
- 下一篇: 信息学奥赛一本通 1074:津津的储蓄计