[ブルーブリッジカップ]スコア統計

6276 ワード

タイトルの説明
パーセンテージ成績Tが与えられ、以下の5つの等級の1つに分けられる.
90~100はA、80~89はB、70~79はC、60~69はD、0~59はE
いくつかのパーセンテージ制の成績(成績の個数は1000個を超えない)があります.5つの等級の人数を統計して、人数が最も多い等級の区間を見つけて、大きい順から小さい順にその区間のすべての人の成績を出力してください(人数が最も多い等級は1つしかありません). 
入力
1行目は成績の個数n 2行目は学生の成績で、0~100の正の整数をいくつか、スペースで区切る
しゅつりょく
第1の行為の5つの正の整数、それぞれA、B、C、D、Eの5つの等級の段の人数を表します
2行目は正の整数で、人数が最も多い等級セグメントの人数を表します.
次の行には、スペースで区切られた正の整数がいくつかあり、人数が最も多いレベルのすべての人の点数を表し、大きい順から小さい順に出力されます. 
サンプル入力
10
100  80  85  77  55  61  82  90  71  60 

サンプル出力
2 3 2 2 1
3
85 82 80
#include
#include
#include<string>
#include
using namespace std;
int score[1001];
int level[5];
char Le(int s)
{
    if(s>=90 && s<=100) return 'A';
    if(s>=80 && s<=89) return 'B';
    if(s>=70 && s<=79) return 'C';
    if(s>=60 && s<=69) return 'D';
    if(s>=0 && s<=59) return 'E';
    return 'Z';//error 
}
int cmp(int x,int y)
{
    return x>y;
}
int main(void)
{
    int n;
    cin >> n;
    for(int i=0;i)
    {
        cin >> score[i];
        level[Le(score[i])-'A']++;
    }
    sort(score,score+n,cmp);
    int pos = 0;
    for(int i=0;i<5;i++)
    {
        if(level[i]>level[pos]) pos=i;
        cout << level[i];
        if(i!=4) cout << " ";
        else cout << endl;
    }
    cout << level[pos]<<endl; 
    int sum = 0;
    for(int i=0;ilevel[i];
    for(int i=sum;i) 
    {
        cout << score[i];
        if(i!=sum+level[pos]-1) cout << " ";
    }
    return 0;
} 

 
転載先:https://www.cnblogs.com/zuimeiyujianni/p/10476209.html