高一年级(1)班的小美老师需要对学生的考试成绩进行处理。单科考试的卷面总分为150分,考生得分一定为整数。
首先按照总分由大到小排序,如果总分相等则按照语文成绩由大到小排序。(输入保证没有两名学生的成绩完全相等)。
输入n个学生的学号和成绩(n<=1000),请输出按要求排序后所有学生的学号。
高一年级(1)班的小美老师需要对学生的考试成绩进行处理。单科考试的卷面总分为150分,考生得分一定为整数。
首先按照总分由大到小排序,如果总分相等则按照语文成绩由大到小排序。(输入保证没有两名学生的成绩完全相等)。
输入n个学生的学号和成绩(n<=1000),请输出按要求排序后所有学生的学号。
单组输入,第1行为n。
接下来n行每一行包含三个整数,分别为学号(>=1的任意正整数,同一组输入保证学号不重复)、语文成绩和数学成绩。
输出按要求排序后所有学生的学号,两个学号之间用空格隔开。
5 10001 95 90 10002 96 96 10003 90 95 10004 100 88 10005 98 94
10005 10002 10004 10001 10003
n = int(input()) report_card = [] for _ in range(n): report_card.append(list(map(int, input().strip().split()))) report_card = sorted(report_card, key=lambda x: (-x[1] - x[2], -x[1])) for item in report_card: print(item[0], end=' ')
// 总分由大到小排序,如果总分相等则按照语文成绩由大到小排序。 #include<iostream> #include<vector> #include<algorithm> using namespace std; class Stu{ public: int id; int chinese; int math; int sum; Stu(int id,int chinese,int math){ this->id=id; this->chinese=chinese; this->math=math; this->sum=math+chinese; } }; bool myCompare(Stu s1,Stu s2){ if(s1.sum==s2.sum){ return s1.chinese>s2.chinese; } return s1.sum>s2.sum; } void printId(vector<Stu> v){ auto it=v.begin(); for(;it!=v.end();it++){ cout<<(*it).id<<" "; } } int main(){ int num; cin>>num; vector<Stu> v; while (num) { int id; int chinese; int math; cin>>id>>chinese>>math; Stu s_tmp(id,chinese,math); v.push_back(s_tmp); num--; } sort(v.begin(),v.end(),myCompare); printId(v); // system("pause"); return 0; }