一道推理题如下:
1.第一个答案是A的问题是哪一个?( )
A、1 B、2 C、3 D、4
2.唯一的连续两个具有相同答案的问题是( )
A、5,6 B、6,7 C、7,8 D、8,9
3.本问题答案和哪一个问题的答案相同( )
A、4 B、9 C、8 D、2
4.答案是A的问题的个数是( )
A、5 B、4 C、3 D、2
5.本问题答案和哪一个问题的答案相同( )
A、1 B、2 C、3 D、4
6.答案选A的问题的个数和答案选什么的问题的个数相同( )
A、无 B、C C、C D、D
7.按照字母顺序,本题答案与下一题相差( )(A与B间,或B与A间均相差1)
A、3 B、2 C、1 D、0
8.本题中答案为元音的题数为( )
A、0 B、1 C、2 D、3
9.本题中答案为辅音的题数( )
A、是合数 B、是质数 C、<5 D、是平方数
10.本题答案为( )
A、A B、B C、C D、D
答案是:A,C,B,C,A,C,D,D,B,A
一共10道题,每个题的答案有A,B,C,D四种可能性,因此可能的解有4^10种可能性,根据题目遍历答案,找到合适的答案即返回。
#include <iostream>
#include <math.h>
class Question{
public:
void InitAnsList();//对答案进行初始化
void FindAnsList();//穷举每一个可能的答案,找到正确答案后返回
void PrintAnsList();//打印答案
private:
char answer[10];//存储答案的变量
bool CheckAnswer01();
bool CheckAnswer02();
bool CheckAnswer03();
bool CheckAnswer04();
bool CheckAnswer05();
bool CheckAnswer06();
bool CheckAnswer07();
bool CheckAnswer08();
bool CheckAnswer09();
bool CheckAnswer10(); //10个题目,10个校验条件
bool UpdateAnswer(); //更新答案
};
void Question::InitAnsList()
{
for(int loop = 0;loop < 10;loop++)
{
answer[loop] = 'A';
}
answer[9] = 'A' - 1;
}
void Question::FindAnsList()
{
while(UpdateAnswer())
{
if(!CheckAnswer01()) continue;
if(!CheckAnswer02()) continue;
if(!CheckAnswer03()) continue;
if(!CheckAnswer04()) continue;
if(!CheckAnswer05()) continue;
if(!CheckAnswer06()) continue;
if(!CheckAnswer07(