洛谷 P1093 奖学金

洛谷 P1093 奖学金

题目

见题目链接
题目链接P1093 奖学金 - 洛谷

输入

见题目链接

输出

见题目链接

样例

见题目链接

题解

由于数据范围较小(n<=300),因此我们可以直接采用冒泡排序。由于题目中说优先采用对总分进行排序,再根据语文成绩,最后根据学号。因此我们在进行冒泡排序时可以进行判断,若两个相邻的学生的总分相同,我们比较他们的语文成绩,如果他们两个的语文成绩也相等,再比较他们的学号。

代码

#include <iostream>
#include <stdlib.h>
#include <string>
#include <math.h>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <stack>
#include <queue>
#include <deque>
#include <vector>

using namespace std;

int main()
{
    int chin[305],sum[305],number[305];
    int n,i,j,math,engli;
    scanf("%d", &n);
    for (i=0;i<n;i++)
    {
        scanf("%d %d %d",&chin[i],&math,&engli);
        number[i] = i+1;
        sum[i] = 0;
        sum[i] = sum[i] + chin[i] + math + engli;
    }
    for (i=0;i<n-1;i++)
        for (j=0;j<n-i-1;j++)
        {
            if (sum[j] < sum[j+1])
            {
                int temp;
                temp = sum[j];
                sum[j] = sum[j+1];
                sum[j+1] = temp;
                temp = chin[j];
                chin[j] = chin[j+1];
                chin[j+1] = temp;
                temp = number[j];
                number[j] = number[j+1];
                number[j+1] = temp;
                continue;
            }
            if (sum[j] == sum[j+1])
            {
                if (chin[j] < chin[j+1])
                {
                    int temp;
                    temp = chin[j];
                    chin[j] = chin[j+1];
                    chin[j+1] = temp;
                    temp = number[j];
                    number[j] = number[j+1];
                    number[j+1] = temp;
                    continue;
                }
                if (chin[j] == chin[j+1])
                {
                    if (number[j] > number[j+1])
                    {
                        int temp;
                        temp = number[j];
                        number[j] = number[j+1];
                        number[j+1] = temp;
                        continue;
                    }
                }
            }
        }
    for (i=0;i<5;i++)
        cout << number[i] << ' ' << sum[i] << endl;
    return 0;
}

P.S. 请忽略那么多的include,仅仅是因为懒得选,所以无论做什么题目都是这一个模版直接全加上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值