日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PTA学生成绩排序-C语言详解

發布時間:2024/8/1 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PTA学生成绩排序-C语言详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

7-72 學生成績排序 (20分)

給出一組學生名單(姓名和成績),請輸出按成績從大到小排序后的結果(名次和姓名)。成績相同的人擁有相同的名次,且按姓名的字典序從小到大排列。題目保證學生姓名沒有重復。

輸入格式:

第一行給出不大于10000的整數N。 接下來N行,每行給出學生姓名和成績,以空格分隔。學生姓名不超過20個字符。

輸出格式:

共輸出N行,每行包含對應的學生排名和姓名,以空格分隔。

輸入樣例:

7
KongDezhen 94
FuTaotao 93
HuYu 94
XuJiecen 94
WuSuqi 96
ChenDa 93
HuNianbo 95

輸出樣例:

1 WuSuqi
2 HuNianbo
3 HuYu
3 KongDezhen
3 XuJiecen
6 ChenDa
6 FuTaotao

#include<stdio.h> #include<string.h> struct student{char name[25];int num; }; int cmp(struct student a,struct student b)//比較函數 {if(a.num==b.num)return strcmp(a.name,b.name)>0;else return b.num>a.num; } int main() {int n,i,j;scanf("%d",&n);struct student a[11111],b;for(i=0;i<n;i++){scanf("%s",a[i].name);scanf("%d",&a[i].num);}for(i=0;i<n;i++)//冒泡排序進階for(j=i+1;j<n;j++){if(cmp(a[i],a[j])){b = a[i];a[i] = a[j];a[j] = b;}}int t=1;for(i=1;i<=n;i++){printf("%d %s\n",t,a[i-1].name);if(a[i].num!=a[i-1].num){t=i+1;}}}

這題的第一個難點主要是需要在給成績排序的同時還要給名字的首字母排序。所以建立一個比較函數較為便捷,然后符合cmp函數的條件就進行排序,其實就是冒泡排序的進階

第二個難點是排名的問題,若成績相同排名相同,其實排名還是按照名次的,仔細揣摩一下我最后是如何排的,挺基礎的一個解決方式。

總結

以上是生活随笔為你收集整理的PTA学生成绩排序-C语言详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。