(PTA) R7-2 分数统计 分数 20

老师想统计学生考试排名,假定一共有n名学生,学号为1至n。现按学号递增顺序给定每个学生的分数,请编写程序,帮助老师计算:对于每个学生,他的成绩比多少人高。假定考试满分为1000分,成绩均为整数。

输入格式:

输入第一行为1个整数n(0

输出格式:

输出n个整数b1 b2 ... bn,每个整数后一个空格,bi(1≤i≤n)表示比学生i成绩低的学生人数。

输入样例1:

5
80 10 20 20 30

 

输出样例1: 

4 0 1 1 3 

解释1:
a1=80,比4个人成绩高。

a2=10,比0个人成绩高。

a3=20,比1个人成绩高。

a4=20,比1个人成绩高。

a5=30,比3个人成绩高。

输入样例2: 

9
10 20 30 40 50 60 70 80 90

 

输出样例2: 

0 1 2 3 4 5 6 7 8 

数据规模:
测试点0:n=10;

测试点1:n=100;

测试点2:n=1000;

测试点3−4:n=100000。

代码长度限制
16 KB
时间限制
60 ms
内存限制
64 MB 

 

这里将会用到桶排序的方法,可具体了解后再进行解题

#include
#include
#define max_std 1000001
#define max_score 1001
//应用到桶排序的方法
int stu[max_std];      //定义一个存储学生分数的数组
int score[max_score];  //定义一个记录分数出现次数的数组

int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)   //将学生i的分数读入stu数组
    {
        scanf("%d",&stu[i]);
        score[stu[i]]++;    //同时在score对相应的分数出现的次数加一
    }
    for(int i=1;i<=max_score;i++)
    {
        score[i]+=score[i-1];   //遍历,记录每个分数以下的其他分数出现的次数,
    }                           //也就是记录每个分数以下的学生的人数
    for(int i=1;i<=n;i++)
    {
        printf("%d ",score[stu[i]-1]);
        /*由上一个for循环的操作可知:欲得到该比某分数低的人数为多少,只需得知
        该分数减一的分数(该分数的上一个分数)出现的次数即可*/
    }
}

(PTA) R7-2 分数统计 分数 20_第1张图片

(新手发文,仅供参考,代码存在不足) 

你可能感兴趣的:(c语言,数据结构)