sicily 奖学金

来源:互联网 发布:美化包软件 编辑:程序博客网 时间:2024/04/30 12:31

sicily 奖学金

题目

这里写图片描述

思路

很自然得到思路
除了按题意常规的输入输出外,主要是以下几个主要操作

1.构建结构体存放:学号、语数英成绩、总分
2.选择一种排序方法,并定义排序方式:这里选用较为简单的 选择排序。并有嵌套比较:总分(total)-> 语文成绩(chinese)->学号(ID)

trap

1.在coding过程中,反而陷入了 Presentation Error 的坑,原因是题目要求在两个trail中间输出一个空行!但绝不是在output后面加一个空行那么简单,!!注意是两个相邻测试数据之间 即:最后一个测试样例不要有空行输出。
但,怎么知道是最后一个测试样例呢?很简单,换个思路:在不是第一个测试样例前输出空行。<-机智

2.因为实现用的是升序排序,所以输出时要从数组尾部输出

实现

#include <iostream>using namespace std;struct data {    int ID;    int chinese;    int math;    int english;    int total;};typedef struct data student; void select_sort(student s[], int num){    for (int position = num-1; position > 0; position--){        int max_index = 0;        for (int i = 0; i <= position; ++i) {            if (s[i].total > s[max_index].total){                max_index = i;            } else if (s[i].total == s[max_index].total){                if (s[i].chinese > s[max_index].chinese){                    max_index=i;                } else if (s[i].chinese == s[max_index].chinese){                    if (s[i].ID < s[max_index].ID){                        max_index=i;                    }                }            }        }        //swap        student temp = s[max_index];        s[max_index] = s[position];        s[position] = temp;    }}int main(){    int student_num;    int test = 0;    while(cin>>student_num){        student students[student_num];        //geting data        if (test)   {            cout<<endl;        }        for (int i = 0; i < student_num; i++){            students[i].ID = i+1;            cin>>students[i].chinese;            cin>>students[i].math;            cin>>students[i].english;            students[i].total = (students[i].chinese + students[i].math + students[i].english);        }        select_sort(students,student_num);        for (int i = student_num-1; i >= student_num-5; i--)    {            cout<<students[i].ID<<" "<<students[i].total<<endl;        }        test++;    }    return 0;}
0 0
原创粉丝点击