蓝桥杯青少年创意编程⼤赛题解:STEMA
题⽬描述
此次测评,蓝桥杯青少组启⽤了全新的 STEMA 测评。成绩与证书的对应关系如下:
排名
证书等级前10%
⼀等奖前30%
⼆等奖前60%
三等奖前80%优秀奖
已知⼩蓝的成绩及其他所有考⽣的成绩,你能帮助⼩蓝计算⼀下他能获得的证书等级吗?
输⼊格式
第⼀⾏为⼀个整数 ,() 代表⼩蓝的成绩。
第⼆⾏为⼀个整数 ,() 代表参加测评的总⼈数。
第三⾏为 个整数,每个整数代表每个参加测评考⽣(除了⼩蓝)的成绩,成绩范围同。
输出格式
A、B、C、D、E 五个字母,分别代表⼀、⼆、三等奖,优秀奖及没有奖。注意:分数相同则等级相同,后续选⼿排名顺延。输⼊样例
少儿编程排名前十名95
10
99 99 90 80 70 71 78 77 60
输出样例
B
样例解释
⼩蓝在  名参赛选⼿中排名第 ,属于前 ,故获得⼆等奖,所以输出 。另两名选⼿由于分数相同,所以并列⼀等奖。算法思想(桶排序)
根据题⽬描述,需要计算出⼩蓝在所有参赛选⼿中的排名,从⽽确定证书等级。计算排名可以使⽤桶排序的思想,对所有成绩进⾏计数,然后从⾼到低累加所有⼩蓝之前的选⼿个数,就可以计算出⼩蓝的排名。
时间复杂度
代码实现
score 0≤score ≤100n 10≤n ≤1000n −1score 10330%B O (n )
#include<iostream>
using namespace std;
const int N =110;
int cnt[N];//cnt[i]表⽰成绩为i的⼈数
int main()
{
int score, n;
cin >> score >> n;
cnt[score]++;
for(int i =1; i <= n -1; i ++)
{
int x;
cin >> x;
cnt[x]++;
}
int sum =0;
for(int i =100; i >=0; i --)
{
sum += cnt[i];
if(score == i)break;
}
int top = sum *100/ n;//计算百分⽐if(top <=10) cout <<'A'<< endl; else if(top <=30) cout <<'B'<< endl; else if(top <=60) cout <<'C'<< endl; else if(top <=80) cout <<'D'<< endl; else cout <<'E'<< endl;
return0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。