推理题(40分)

前言:

今天在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;
}

答案: 

 

 

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大章鱼(张文哲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值