PAT レベル A 1137 最終スコア

元のタイトルへのリンク

中国の大学 MOOC で「データ構造」コースを学習する学生が資格のある証明書を取得するには、まずオンライン プログラミング課題で 200 ポイント以上を取得し、次にオンライン プログラミング課題で 60 ポイント以上 (100 点満点) を取得する必要があります。総合的な評価。

総合評価スコアの計算式は、Gmid-term>GfinalであればG=(Gmid-term×40%+Gfinal×60%)、それ以外の場合にはGfinalとなる。

ここで、Gmid-term と Gfinal はそれぞれ生徒の中間成績と最終成績です。

ここでの問題は、各テストが個別のスコアカードを作成することです。

この質問では、異なるトランスクリプトを 1 つに結合するプログラムを作成してください。

入力形式
1行目にP(オンラインプログラミング課題を行った生徒数)、M(中間試験を受けた生徒数)、N(期末試験を受けた生徒数)の3つの整数を入力します。 )。

次に入力の 3 つのブロックがあります。

最初のブロックには P 個のオンライン プログラミング グレード Gp が含まれます。

2 番目のブロックには M 個の中間試験成績 Gmid−term が含まれます。

3 番目のブロックには、N 個の最終試験成績 Gfinal が含まれます。

各学年は 1 行を占め、形式は次のとおりです: 生徒番号スコア。

このうち学生証は20文字以内の英数字、得点は負でない整数(プログラミングの合計最高点は900点、中間・期末の最高点は100点)である。

出力形式 在留
資格認定証明書交付学生一覧を印刷します。

生徒ごとに 1 行、形式は次のとおりです。

学籍番号 Gp G 中間 G 最終 G
成績が存在しない場合(中間試験を受けなかった場合など)は該当箇所に「−1」を出力します。

出力順序は合計スコアに応じて降順になります(整数に四捨五入)。

同点の場合は学籍番号に応じて加算されます。

このトピックでは、学生 ID が重複しないこと、および資格のある学生が少なくとも 1 人いることが保証されます。

データ範囲
1≦P,M,N≦10000
入力例:
6 6 7
01234 880
a1903 199
ydjh2 200
wehu8 300
dx86w 220
missing 400
ydhfu77 99
wehu8 55 ydjh2
98
dx86w 88 a1903 86 0 1234 39 ydhfu77 88
a1903 66 01234 58 wehu8 84 ydjh2 82欠落 99 dx86w 81出力例:欠落 400 -1 99 99 ydjh2 200 98 82 88 dx86w 220 88 81 84 wehu8 300 55 84 84












私の解決策:

#include <bits/stdc++.h>
using namespace std;
struct Student{
    string id;
    int p, m, f, s;
    Student(): p(-1), m(-1), f(-1), s(0){}
    
    void calc(){
        if(m > f) s = round(m*0.4 + f*0.6);
        else s = f;
    }
    
    bool operator< (const Student& t) const{
        if(s != t.s) return s > t.s;
        else{
            return id < t.id;
        }
    }
};

int main(){
    int p, m, n;
    cin >> p >> m >> n;
    
    unordered_map<string, Student> hash;
    
    string id;
    int s;
    
    for(int i = 0; i < p; i ++ ){
        cin >> id >> s;
        hash[id].id = id;
        hash[id].p = s;
    }
    
    for(int i = 0; i < m; i ++ ){
        cin >> id >> s;
        hash[id].id = id;
        hash[id].m = s;
    }
    
    for(int i = 0; i < n; i ++ ){
        cin >> id >> s;
        hash[id].id = id;
        hash[id].f = s;
    }
    vector <Student> students;
    for(auto per : hash){
        auto stu = per.second;
        stu.calc();
        if(stu.p >= 200 && stu.s >= 60) students.push_back(stu);
    }
    sort(students.begin(), students.end());
    for(auto re : students){
        cout << re.id << ' ' << re.p << ' ' << re.m << ' ' << re.f << ' ' << re.s << endl;
    }
    return 0;
}

褒美:

  構造体コンストラクターの初期化: Student(): p(-1)、m(-1)、f(-1)、s(0){}

構造体の内部機能を定義する

おすすめ

転載: blog.csdn.net/weixin_45660485/article/details/126073059