OJ是一个同学们又爱又恨的东东。老师在OJ上布置了作业,并且把作业成绩作为实验课程的成绩。马上就要结课了,小明想知道自己到底能得到多少分,所以他向老师请教分数的计算方法。老师告诉他,分数是这么算滴:
1. 对于某次作业,假设所有同学中Accpted题目数最多为X,小明Accpted题目数为Y,那么这次作业小明得分100Y/X。
2. 如果小明不幸错过了某次作业或者没有题目被Accpted,那么为0分。
3. 最终成绩是所有作业成绩的平均分。
好了,小明从OJ上下载了所有的standing,发现要想计算成绩还是挺麻烦的。所以,他向你求助,请你帮忙编个程序,算算分数。
第1行N>0,表示本年级、本专业的学生数。
之后N行,每行是一个不含空白符的字符串,是一个学生的名字(假定没有重名,且姓名最多有10个字符)。
接着是M>0,表示老师总共布置的作业次数。
每次作业的输入中,第1行K>0,表示这次作业的standing中有提交记录的学生人数。之后K行是K个学生的姓名及其Accpted的题目数。
第1行输出:NAME TEST1 TEST2 TEST3 ...... FINAL。
其中,“TEST?”的个数等于作业次数,按照顺序依次输出,如上所示。
之后根据输入的专业学生姓名顺序,依次输出所有学生的每次作业成绩以及最终成绩。
所有输出左对齐。
成绩保留2位小数,且左对齐输出。
输出的每一列的第1个字符要对齐。
见样例。
#include<iostream> #include<vector> #include<string> #include<map> #include<iomanip> using namespace std; class Test{ private: map<string,double> m; public: void input(int k){ double ma=0;string n; double num; while(k--){ cin>>n>>num; if(num>ma) ma=num; m.insert(make_pair(n,num)); } m.insert(make_pair("max",ma)); } void score(){ map<string,double>::iterator ite; double ma; for(ite=m.begin();ite!=m.end();ite++){ if(ite->first=="max") ma=ite->second; } for(ite=m.begin();ite!=m.end();ite++){ ite->second=100*(ite->second)/ma; } } void out(string n){ map<string,double>::iterator ite; int flag=0; for(ite=m.begin();ite!=m.end();ite++){ if(ite->first==n){ cout<<setiosflags(ios::left)<<setw(7)<<setprecision(2)<<fixed<<ite->second; flag=1; } } if(flag==0) cout<<setiosflags(ios::left)<<setw(7)<<setprecision(2)<<fixed<<0.0; } double ttt(string n){ map<string,double>::iterator ite; for(ite=m.begin();ite!=m.end();ite++){ if(ite->first==n) return ite->second; } return 0; } }; int main(){ vector<string> name; string T;int N;cin>>N; for(int j=0;j<N;j++){ cin>>T;name.push_back(T); } int M; cin>>M; Test test[M]; for(int i=0;i<M;i++){ int K;cin>>K; test[i].input(K); test[i].score(); } cout<<"NAME "; for(int i=1;i<=M;i++) cout<<"TEST"<<setiosflags(ios::left)<<setw(3)<<i; cout<<"FINAL"<<endl; for(int i=0;i<N;i++){ double sum=0; cout<<setiosflags(ios::left)<<setw(12)<<name[i]; for(int j=0;j<M;j++){ test[j].out(name[i]); sum+=test[j].ttt(name[i]); } cout<<setiosflags(ios::left)<<setw(6)<<setprecision(2)<<fixed<<sum/M<<endl; } }