3-7-3 对了几题(单选题) (10 分)
编写程序,判断用户的单选题答对了几题。 说明: 1--以十个判断题为例,用户提交的答案应该是长度为十的字符串,如:"ABCDDCBACD",字符的位置代表了题号,选择项当然是字符集['A','B','C','D'']之一。 2--标准答案是一个长整数(8个字节,64个二进制位),长整数的二进制存储中,用两个二进制位来对应一个答案:00-A,01-B,10-C,11-D,一个长整数可标记32个题目的答案。如228的整数机内表示的最低八位是11 10 01 00,它表示前四题的答案依次是ABCD。
输入格式:
输入内容有二行: 第一行,用户提交的答题选项:每个字符代表一个选项(ABCD之一),字符串的长度表示题目数量(范围在【5,32】内)。 第二行,一个用二进制位来表示标准答案的长整数(注意,不是字符串)。
输出格式:
输出用户单选题回答正确数量(多少题与标准答案相同)。
输入样例:
ABCDABCD
-6940
输出样例:
8
#include<iostream>
using std::string;
const int N =64;
char bin[N];
void dec2bin(unsigned int x,char* a)
{
int i=0;
do
{
int tmp=x%2;
a[i]=tmp+48;
i++;
x/=2;
}while(x);
std::cerr<<"转换成功\t";
for(int i=N-1;i>=0;i--)
{
std::cerr<<a[i];
}
std::cerr<<std::endl;
}
int main()
{
for(int i=0;i<N;i++)
{
bin[i]=48;
}
int cnt=0;
string s;
std::cin>>s;
int x;
std::cin>>x;
dec2bin(x,bin);
int i=0;
for(auto it=s.begin();it!=s.end();it++)
{
char x=*it;
string cm;
cm+=bin[i+1];
cm+=bin[i];
std::cerr<<x<<"\t"<<cm<<std::endl;
if((*it=='A'&&cm=="00")||(*it=='B'&&cm=="01")||(*it=='C'&&cm=="10")||(*it=='D'&&cm=="11"))
{
cnt++;
}
i+=2;
}
std::cout<<cnt<<std::endl;
}