题目
andy参加考试,总计ABCD...LM13道题,输入andy答对的题目,已知每道题的回答人数(<180),求andy未回答出的题目中,答对人数最多的题目,有重复取较前的题目。
#include<iostream>
#include<algorithm>
using namespace std;
int N;
char pass[13];//andy得分的题目
int person[13];//每道题得分的人数
int passnum[13];//andy得分的题目,过的人数
struct Rule1{
bool operator()(const int &a1, const int &a2){
return a1 >a2; //从大到小排序
}
};
int main(){
cin >> N;
for (int i = 0; i < N; ++i)
cin >> pass[i];
for (int i = 0; i < 13; ++i)
cin >> person[i];
for (int i = 0; i < N; ++i){
switch (pass[i])
{
case 'A':
passnum[i] = person[0];
break;
case 'B':
passnum[i] = person[1];
break;
case 'C':
passnum[i] = person[2];
break;
case 'D':
passnum[i] = person[3];
break;
case 'E':
passnum[i] = person[4];
break;
case 'F':
passnum[i] = person[5];
break;
case 'G':
passnum[i] = person[6];
break;
case 'H':
passnum[i] = person[7];
break;
case 'I':
passnum[i] = person[8];
break;
case 'J':
passnum[i] = person[9];
break;
case 'K':
passnum[i] = person[10];
break;
case 'L':
passnum[i] = person[11];
break;
case 'M':
passnum[i] = person[12];
break; break;
}
}
cout << "输出andy回答正确的题目下标:";
for (int i = 0; i < N; ++i)
cout << passnum[i] << " ";
cout << endl;
cout << "输出每道题回答正确的人数:";
for (int i = 0; i < 13; ++i)
cout << person[i]<<" ";
cout << endl;
int temp[13]; //andy未得分的题目,通过的人数
int k = 0;
int j = 0;
//for (int i = 0; i < N; ++i){
// for ( j ; j < 13; ){
// if (person[j] != passnum[i]){
// temp[k] = person[j];
// ++k;
// j++;
// }
// else
// {
// j++; break; break;
// }
// }
//}
int n = 0;//疑问,用i错误,j++必须写在外面
while (n < N){
for (j; j < 13; ){
if (person[j] != passnum[n]){
temp[k] = person[j];
++k;
++j;
}
else{
n++;
++j;
break;
}
}
}
int size = 13 - N;
cout << "输出and回答错的题目下标:";
for (int i = 0; i < size; ++i)
cout <<temp[i] << " ";
cout<<endl;
sort(temp , temp + size , Rule1());
int tmp = temp[0];
for (int i = 0; i < 13; ++i){
if (person[i] == tmp){
cout << char(65 + i);
break;
}
}
return 0;
}