题目描述
每次期末考试成绩出来之前的一段时间大豪哥心里都是痛苦的,总感觉自己会在班上排名特别差。所以当成绩出来以后大豪哥想快点知道班上的总排名,以便知道自己的排名。(PS:大豪哥班上有个学霸名叫日天,又名泰迪,不要问我为什么,因为泰迪的行为决定的)
输入
多组测试数据,至文件结尾。
先输入每个班上有n个同学,这个学期有m门课程(1<=n,m<=100)
接下来有n行,每行的输入格式为学号id,姓名name,课程成绩k1,课程成绩k2... ,课程成绩km.(学号在int型范围以内,0<=ki<=100,姓名长度在20个字符以下)
输出
输出班上每个同学排名,并输出总分及排名(如果总分相同就按学号从小到大输出,但是排名还是相同的)输出格式见样例
样例输入
4 4 1 Taidi 100 100 90 90 2 Dahaoge 60 60 70 60 3 Yeshen 90 90 100 100 4 Wangpangzi 50 60 100 80
样例输出
1 Taidi 100 100 90 90 Sum = 380 Ranking = 1 3 Yeshen 90 90 100 100 Sum = 380 Ranking = 1 4 Wangpangzi 50 60 100 80 Sum = 290 Ranking = 3 2 Dahaoge 60 60 70 60 Sum = 250 Ranking = 4
题解:结构体排序
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <cmath> 9 #include <ctime> 10 #include <map> 11 #include <set> 12 #include <queue> 13 using namespace std; 14 #define lowbit(x) (x&(-x)) 15 #define max(x,y) (x>y?x:y) 16 #define min(x,y) (x<y?x:y) 17 #define MAX 100000000000000000 18 #define MOD 1000000007 19 #define pi acos(-1.0) 20 #define ei exp(1) 21 #define PI 3.141592653589793238462 22 #define INF 0x3f3f3f3f3f 23 #define mem(a) (memset(a,0,sizeof(a))) 24 typedef long long ll; 25 ll gcd(ll a,ll b){ 26 return b?gcd(b,a%b):a; 27 } 28 const int N=110; 29 const int mod=1e9+7; 30 struct node 31 { 32 int id; 33 string name; 34 int grade[N]; 35 int sum; 36 }stu[N]; 37 bool cmp(node a,node b) 38 { 39 if(a.sum==b.sum) 40 return a.id<b.id; 41 return a.sum>b.sum; 42 } 43 int main() 44 { 45 int n,m,num; 46 cin.sync_with_stdio(false); 47 while(cin>>n>>m){ 48 for(int i=0;i<n;i++){ 49 cin>>stu[i].id>>stu[i].name; 50 stu[i].sum=0; 51 for(int j=0;j<m;j++){ 52 cin>>stu[i].grade[j]; 53 stu[i].sum+=stu[i].grade[j]; 54 } 55 } 56 sort(stu,stu+n,cmp); 57 for(int i=0;i<n;i++){ 58 cout<<stu[i].id<<" "<<stu[i].name; 59 for(int j=0;j<m;j++){ 60 cout<<" "<<stu[i].grade[j]; 61 } 62 if(i==0) num=1; 63 else if(stu[i].sum!=stu[i-1].sum) 64 num=i+1; 65 cout<<" Sum = "<<stu[i].sum<<" Ranking = "<<num<<endl; 66 } 67 } 68 return 0; 69 }