一、背景
朋友这几天在准备公务员考试,闲聊之中,给我传来一道题,是一道逻辑推理题,问我答案为何?
让我这个工作好几年的老油条再做这种题,真的伤脑筋,我说:“干脆我用编程做做看吧”,于是便有了此文……
二、正文
这里我用的是javascrpt编程语言
1、定义变量
定义小王为 wang;
定义小张为 zhang;
定义小李为 li;
var wang = 0;
var zhang = 0;
var li = 0;
2、设定条件
类型一:
条件1:如果小王被挑选上,那么小张就会被挑选上
条件2:只有小李被选上,小王才不会被选上
条件3:如果小张被选上,那么小李就会被选上
前三个条件,带有“如果”、“只有”的假设语气,所以逻辑上属于一类,注意需要考虑“如果不”的情况( 用到 || )
条件1:(wang && zhang) || (!wang)
条件2:(li && !wang) || (!li)
条件3:(zhang && li) || (!zhang)
类型二:
条件4:小王和小李都会被选上,那是不可能的
条件4属于确定语气,所以逻辑上属于另一类
条件4:!(wang && li)
3、遍历所有情况,筛选符合条件的情况
遍历用三层for循环,对三个参选人,分别用0表示没被选上,1表示被选上
for (var wang = 0; wang <= 1; wang++) {
for (var zhang = 0; zhang <= 1; zhang++) {
for (var li = 0; li <= 1; li++) {
再判断是否同时满足上述n种条件:
if (condition_1 && condition_2 && condition_3 && condition_4) {
4、输出结果
运行代码,在浏览器的控制台看到输出结果:
第一种:小王,小张,小李都没选上
第二种:小王和小张都没选上,小李选上了
第三种:小王没选上,小张和小李都选上了
根据题意,最终只能推选1至2个候选人,所以排除第一种,所以只剩第二种和第三种结果。
所以结合原题,答案选D。
三、完整代码
var result = [];
for (var wang = 0; wang <= 1; wang++) {
for (var zhang = 0; zhang <= 1; zhang++) {
for (var li = 0; li <= 1; li++) {
var condition_1 = (wang && zhang) || (!wang);
var condition_2 = (li && !wang) || (!li);
var condition_3 = (zhang && li) || (!zhang);
var condition_4 = !(wang && li);
if (condition_1 && condition_2 && condition_3 && condition_4) {
var re = "wang:" + wang + ",zhang:" + zhang + ",li:" + li;
result.push(re);
}
}
}
}
console.log(result);