【每日例题】蓝桥杯 c++ 奖学金

发布时间 2023-11-04 12:39:46作者: 山远尽成云

奖学金

题目

蓝桥杯 奖学金

题目分析

  1. 由题目可知,该题涉及到五个属性:学号,语文分数,数学分数,英语分数,总分;由于我们需要通过输入语文、数学、英语分数,经过操作后,输出学号与总分,所以我们可以通过结构体进行存储。

             下面是有关结构体的信息:结构体信息

      2.下面是排序优先级的要求:

  • 先按总分从高到低排序。
  • 如果两个同学总分相同,再按语文成绩从高到低排序。
  • 如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面
    我们可以通过专门使用一个函数来处理该排序是否正确,为了节省时间,我们可以调用sort函数排序,再通过一个函数来确认sort函数排序是否正确

sort函数

代码

#include <iostream>
#include <algorithm>
using namespace std;
struct student
{
  int id;
  int c,m,e;
  int sum;
}s[300];

bool cmp(student a,student b)
{
  if(a.sum>b.sum)
    return true;
  else if (a.sum<b.sum)
    return false;
  else
  {
    if(a.c>b.c)
      return true;
    else if(a.c<b.c)
      return false;
    else
    {
      if (a.id>b.id)
        return true;
      else
        return false;
    }
  }
}

int main()
{
  int n;
  cin>>n;
  for(int i=1;i<=n;i++)
  {
    s[i].id=i;
    cin>>s[i].c>>s[i].m>>s[i].e;
    s[i].sum=s[i].c+s[i].m+s[i].e;
  }
  sort(s+1,s+n+1,cmp);
  for(int i=1;i<=5;i++)
  {
    cout<<s[i].id<<' '<<s[i].sum<<endl;
  }
  return 0;
}