PAT(Basic Level) Practice : 1058 选择题 (20分)
1058 选择题 (20分)
getline的问题
学生的答案()与()之间有空格,用getline读取一整行
在这之前,先用getline读取一行内容,接下来才能正确读取
代码
#include <iostream>
#include <vector>
#include <string>
#include <cstdio>
//scanf printf防止超时
#include <algorithm>
//vector的sort
#include <sstream>
//转换
using namespace std;
#include<iomanip>
//精度
#include<cmath>
//round四舍五入取整
class test
{
public:
int grade;
int num;
int right;
vector<char> choices;
};
int main()
{
int N,M;
cin>>N>>M;
vector<test> answers;
for(int i=0;i<M;i++)
{
int g,n,r;
cin>>g>>n>>r;
vector<char> temp;
for(int j=0;j<r;j++)
{
char t;
cin>>t;
temp.push_back(t);
}
test te;
te.grade=g;te.num=n;te.right=r;
te.choices=temp;
answers.push_back(te);
}
string str;
getline(cin,str);
vector<int> statistics;
for(int i=0;i<M;i++)
{
statistics.push_back(0);
}
for(int i=0;i<N;i++)
{
int grade=0;
string result;
getline(cin,result);
//cout<<result<<endl;
int number=0;//答题编号
for(int i=0;i<result.length();i++)
{
if(result[i]=='(')
{
i++;
int judge1=result[i]-'0';
if(judge1==answers[number].right)
{
bool flag=true;
for(int j=1;j<=judge1;j++)
{
if(result[i+j*2]!=answers[number].choices[j-1])
flag=false;
}
if(flag)
{
grade+=answers[number].grade;
}else
{
statistics[number]++;
}
}else
{
statistics[number]++;
}
number++;
}
}
cout<<grade<<endl;
}
int max=0;
for(int i=0;i<M;i++)
{
if(statistics[i]>max)
max=statistics[i];
}
if(max==0)
{
cout<<"Too simple"<<endl;
}else{
cout<<max<<" ";
vector<int>res;
for(int i=0;i<M;i++)
{
if(statistics[i]==max)
{
res.push_back(i+1);
}
}
for(int i=0;i<res.size();i++)
{
cout<<res[i];
if(i!=res.size()-1)
cout<<" ";
else
cout<<endl;
}
}
return 0;
}