前言:
今天在blink上看到了这一条动态,顺道解决了
五、推理题(40分)
1、这道题的答案是( )
A、A B、B C、C D、D
2、第5题的答案是()
A、C B、D C、A D. B
3、以下选项中哪一题的答案与其它三项不同( )
A、第3题 B、第6题 C、第2题 D、第4题
4、以下选项中哪两题的答案相同( )
A、第1、5题 B、第2、7题 C、第1、9题 D、第6、10题
5、以下选项中哪一题的答案与本题相同( )
A、第8题 B、第4题 C、第9题 D、第7题
5、 以下选项中哪两题的答案与第8题相同( )
A、第2、4题 B、第1、6题 C、第3、10题 D、第5、9题
7、在此十道题中,被选择次数最少的选项字母为( )
A、C B、B C、A D、D
3、 以下选项中哪一-题的答案与第1题的答案在字母表中不相邻( )
A、第7题 B、第5题 C.第2题 D.第10题
9、已知“第1题与第6题的答案相同”与“第X题与第5题的答案相同”的真假性相反,那么x为()
A、第6题 B、第10题 C、第2题 D、第9题
10、在此十道题中,ABCD四个字母中出现的次数最多者与最少者的差为( )
A、3 B、2 C、4 D、1
本试题的答案为_
(简述推理过程)
原题:
实现:
#include<iostream>
#include<vector>
#include<map>
using namespace std;
vector<int>ans(11,0);
vector<map<int,int>> option(11);
vector<vector<int>> opt4 = {{1,5},{2,7},{1,9},{6,10}};//选项到选项值映射
vector<vector<int>> opt6= {{2,4},{1,6},{3,10},{5,9}};
bool condition2(int x) {
return option[2][x]==ans[5];//第2题答案的值跟第五题答案相比
}
bool condition3(int x) {
bool flag=false;
int t=0,sum=0;
for(int i=1; i<5; ++i)
if(i!=x) {
if(!flag) {
flag=true;
t=ans[option[3][i]];//找到第一个第三题没选的选项的值
} else
sum+=ans[option[3][i]]-t;//说明三项都是相同的结果,所以结果为零时问题三为真
}
return sum==0;
}
bool condition4(int x) {
return ans[opt4[x-1][0]]==ans[opt4[x-1][1]];
}
bool condition5(int x) {
return x==ans[option[5][x]];
}
bool condition6(int x) {
return ans[8]==ans[opt6[x-1][0]]&&ans[8]==ans[opt6[x-1][1]];
}
bool condition7(int x) {
map<int,int> temp;
for(int i=1; i<11; ++i)
temp[ans[i]]++;//统计次数
int minsum=15,minchoice=0;
for(int i=1; i<5; ++i) {
if(temp[i]<minsum) {//选出出现次数最少的选项,可能为0,我一开始没考虑到
minsum=temp[i];
minchoice=i;
}
}
return x==option[7][minchoice];
}
bool condition8(int x) {
return abs(ans[option[8][x]]-ans[1])!=1;//不相邻说明绝对值之差不等于1
}
bool condition9(int x) {
return (ans[1]==ans[6])&&(!(ans[option[9][x]]==ans[5]))||(!(ans[1]==ans[6]))&&(ans[option[9][x]]==ans[5]);
}
bool condition10(int x) {
vector<int>temp(5,0);
for(int i=1; i<11; ++i)
temp[ans[i]]++;//统计次数
int minsum=15,maxsum=0;
for(int i=1; i<5; ++i) {
if(temp[i]<minsum)
minsum=temp[i];//次数最小值,可能为0,我一开始没考虑到
if(temp[i]>maxsum)
maxsum=temp[i];//次数最大值
}
int t=maxsum-minsum;
return option[10][x]==t;
}
void dfs(int k) {
if(k==11) {
if(condition2(ans[2])&&condition3(ans[3])&&condition4(ans[4])&&condition5(ans[5])&&condition6(ans[6])&&condition7(ans[7])&&condition8(ans[8])&&condition9(ans[9])&&condition10(ans[10])) {
for(int i=1; i<11; ++i)
cout<<(char)('A'+ans[i]-1)<<" ";
cout<<endl;
}
return ;
}
for(int i=1; i<5; ++i) {
ans[k]=i;
dfs(k+1);
}
}
int main() {
option[2]= {{1,3},{2,4},{3,1},{4,2}};//选项到选项值映射
option[3]= {{1,3},{2,6},{3,2},{4,4}};
option[5]= {{1,8},{2,4},{3,9},{4,7}};
option[7]= {{3,1},{2,2},{1,3},{4,4}};//选项值到选项映射
option[8]= {{1,7},{2,5},{3,2},{4,10}};
option[9]= {{1,6},{2,10},{3,2},{4,9}};
option[10]= {{1,3},{2,2},{3,4},{4,1}};
dfs(1);
return 0;
}
答案: 