http://bailian.openjudge.cn/ss2017/A/
#include<iostream> #include <cmath> #include <math.h> #include <vector> #include <algorithm> struct Student { int num; int chinese; int math; int english; int getAllGrade() { return chinese + math + english; } }; bool compare(Student one, Student two) { int allGradeOne = one.getAllGrade(); int allGradeTwo = two.getAllGrade(); if (allGradeOne>allGradeTwo) { return true; } else if(allGradeOne==allGradeTwo) { if (one.chinese>two.chinese) { return true; } else if (one.chinese==two.chinese) { if (one.num<two.num) { return true; } else { return false; } } else { return false; } } else { return false; } } int main() { int n = 0; std::cin >> n; std::vector<Student> students; int cnt = 1; for (; cnt <= n; cnt++) { Student tempStudent; tempStudent.num = cnt; int tempChinese = 0, tempMath = 0, tempEnglish = 0; std::cin >> tempChinese >> tempMath >> tempEnglish; tempStudent.chinese = tempChinese; tempStudent.math = tempMath; tempStudent.english = tempEnglish; students.push_back(tempStudent); } /*for (auto tempStudent : students) { std::cout << tempStudent.num << ":" << tempStudent.chinese << std::endl; }*/ sort(students.begin(), students.end(), compare); for (int i = 0; i < 5; i++) { std::cout << students[i].num << " " << students[i].getAllGrade() << std::endl; } return 0; }