中国の大学 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){}
構造体の内部機能を定義する