赞
踩
此次测评,蓝桥杯青少组启用了全新的 STEMA 测评。成绩与证书的对应关系如下:
排名 | 证书等级 |
---|---|
前10% | 一等奖 |
前30% | 二等奖 |
前60% | 三等奖 |
前80% | 优秀奖 |
已知小蓝的成绩及其他所有考生的成绩,你能帮助小蓝计算一下他能获得的证书等级吗?
输入格式
第一行为一个整数 s c o r e score score,( 0 ≤ s c o r e ≤ 100 0\le score\le 100 0≤score≤100) 代表小蓝的成绩。
第二行为一个整数 n n n,( 10 ≤ n ≤ 1000 10\le n\le 1000 10≤n≤1000) 代表参加测评的总人数。
第三行为 n − 1 n-1 n−1个整数,每个整数代表每个参加测评考生(除了小蓝)的成绩,成绩范围同 s c o r e score score。
输出格式
A、B、C、D、E 五个字母,分别代表一、二、三等奖,优秀奖及没有奖。注意:分数相同则等级相同,后续选手排名顺延。
输入样例
95
10
99 99 90 80 70 71 78 77 60
输出样例
B
样例解释
小蓝在 10 10 10 名参赛选手中排名第 3 3 3,属于前 30 % 30\% 30%,故获得二等奖,所以输出 B B B。另两名选手由于分数相同,所以并列一等奖。
根据题目描述,需要计算出小蓝在所有参赛选手中的排名,从而确定证书等级。计算排名可以使用桶排序的思想,对所有成绩进行计数,然后从高到低累加所有小蓝之前的选手个数,就可以计算出小蓝的排名。
O ( n ) O(n) 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;
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。