sicily 1482

来源:互联网 发布:知游文化传播有限公司 编辑:程序博客网 时间:2024/05/17 01:55
//就开始的时候在格式的输出有错误,实在是搞不懂“两个相邻测试数据间用一个空行隔开”如何表示,看了别人的代码才明白!#include "iostream"#include "algorithm"using namespace std;struct Info//学生信息的存储{int num;int chinese;int math;int english;int sum;};int main(){int StuNum;cin >> StuNum;while (1){Info *StudentInfo = new Info[StuNum];for (int i = 0; i < StuNum; i++)StudentInfo[i].num = i + 1;for (int i = 0; i < StuNum; i++)//学生信息的输入{cin >> StudentInfo[i].chinese;cin >> StudentInfo[i].math;cin >> StudentInfo[i].english;}for (int i = 0; i < StuNum; i++)//学生信息的总分计算StudentInfo[i].sum = StudentInfo[i].chinese + StudentInfo[i].math + StudentInfo[i].english;Info temp;for (int i = 0; i < StuNum; i++)//得出前五名总分最高的学生for (int j = i+1; j < StuNum; j++){if (StudentInfo[i].sum < StudentInfo[j].sum){temp = StudentInfo[j];StudentInfo[j] = StudentInfo[i];StudentInfo[i] = temp;}if (StudentInfo[i].sum == StudentInfo[j].sum)//如果总分相等的情况{if (StudentInfo[i].chinese < StudentInfo[j].chinese){temp = StudentInfo[j];StudentInfo[j] = StudentInfo[i];StudentInfo[i] = temp;}if (StudentInfo[i].chinese == StudentInfo[j].sum)//如果总分相等而且语文成绩又相等的情况{if (StudentInfo[i].num < StudentInfo[j].num){temp = StudentInfo[j];StudentInfo[j] = StudentInfo[i];StudentInfo[i] = temp;}}}}for (int i = 0; i < 5; i++)cout << StudentInfo[i].num << " " << StudentInfo[i].sum << endl;if (cin >> StuNum)cout << endl;elsebreak;}}