打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
排名

【题目描述】

一年一度的江苏省小学生程序设计比赛开始了,组委会公布了所有学生的成绩,成绩按分数从高到低排名,成绩相同按年级从低到高排。

现在,主办单位想知道对于每一个排名的学生前,有几位学生的年级低于他。

【输入】

第1行只有一个正整数n,表示参赛的学生人数。

第2行至第n+1行共n行,每行有两个正整数s,g,之间用一个空格隔开,其中第i+1行的第一个数s表示第i个学生的成绩,第i+1行的第二个数g表示第i个学生的年级。

【输出】

输出n行,每行只有一个正整数,其中第i行的数k表示排第i名的学生前面有k个学生排名比他高,且年级比他低。

【输入样例】

5

300 5

200 6

350 4

400 6

250 5

【数据范围】

对于100%的数据:1≤n≤200,0≤s≤400,1≤g≤6。

【解题思路】

我们先按题目的要求排序,然后枚举每一个人的每一个在他前面的人,然后判断,统计。

最后每次统计完一个人就输出。

【代码实现】

#include<bits/stdc++.h>

using namespace std;

int main()

{

         int n,s[1000],g[1000],t,sum;

         cin>>n;

         for(int i=1;i<=n;i++)//输入学生的成绩和年级

         {

                   cin>>s[i]>>g[i];

         }

         for(int i=1;i<=n;i++)

         {

                   for(int j=i+1;j<=n;j++)

                   {

                            if(s[i]<s[j]||(s[i]==s[j]&&g[i]<g[j]))//按成绩降序排序,若成绩相同按年级升序排序

                            {

                                     t=s[i];

                                     s[i]=s[j];

                                     s[j]=t;//交换s[i]s[j]交换

                                     t=g[i];

                                     g[i]=g[j];

                                     g[j]=t;//交换g[i]g[j]交换

                            }

                   }

         }

         for(int i=1;i<=n;i++)//统计出排第i名学生前面成绩比他高,且年级比他低的人数。

         {

                   sum=0;

                   for(int j=i;j>0;j--)

                   {

                            if(g[i]>g[j])

                            sum++;

                   }

                   cout<<sum<<endl;

         }

         return 0;

}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
3.25
7-5 计算阶乘和 对于给定的正整数N,需要你计算 S=1!+2!+3!+...+N!。
计算思维与循环结构
将十六进制正整数转换成相应的十进制数
华为机试HJ69:矩阵乘法
对台阶步数问题的数学分析及更优解探索
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服