题目描述:
下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用wifi,又怕耽误亲们的学习,现将wifi密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。谢谢合作!!~”—— 老师们为了促进学生学习也是拼了…… 本题就要求你写程序把一系列题目的答案按照卷子上给出的对应关系翻译成wifi的密码。这里简单假设每道选择题都有4个选项,有且只有1个正确答案。
输入格式:
输入第一行给出一个正整数N(<= 100),随后N行,每行按照“编号-答案”的格式给出一道题的4个选项,“T”表示正确选项,“F”表示错误选项。选项间用空格分隔。
输出格式:
在一行中输出wifi密码。
输入样例:
8
A-T B-F C-F D-F
C-T B-F A-F D-F
A-F D-F C-F B-T
B-T A-F C-F D-F
B-F D-T A-F C-F
A-T C-F B-F D-F
D-T B-F C-F A-F
C-T A-F B-F D-F
输出样例:
13224143
题目分析:最大的难点也就再读入了,只要使用getchar()吸收掉相应无用字符,下面就很好处理。笔者使用map设置了选项字母A,B,C,D和1,2,3,4之间的映射。然后每读入一个编号-答案,如果答案是T,那么将该编号对应的密码放进vector中,最后一次输出即可。
#include<stdio.h>
#include<map>
#include<vector>
using namespace std;
int main()
{
map<char,int> code;
vector<int> password;
code['A']=1;code['B']=2;code['C']=3;code['D']=4; //建立映射
char ch,ans;
int n;
scanf("%d",&n); //读入题目数量
for(int i=0;i<n;i++){
for(int j=0;j<4;j++){
getchar(); //吸收掉上一行的换行符
scanf("%c",&ch); //读入编号
getchar(); //吸收掉字符'-'.
scanf("%c",&ans); //读入答案
//printf("%c%c\n",ch,ans);
if(ans=='T'){
password.push_back(code[ch]) ; //如果答案正确,那么将对应的密码放入password中
}
}
}
for(int i=0;i<password.size() ;i++){ //密码输出
printf("%d",password[i]);
}
}