这是网上很火的2018刑侦推理试题,网上已经有人推理得出答案。
作为程序员当然想的是如何用编程得出答案.
php代码如下
'C','B'=>'D','C'=>'A','D'=>'B'); if($question[$data[2]] == $data[5]) return true; return false;}function check_3($data){ $question = array('A'=>$data[3],'B'=>$data[6],'C'=>$data[2],'D'=>$data[4]); $answer = $question[$data[3]]; unset($question[$data[3]]); if(!in_array($answer,$question)) return true; return false;}function check_4($data){ $question = array('A'=>$data[1]==$data[5],'B'=>$data[2]==$data[7],'C'=>$data[1]==$data[9],'D'=>$data[6]==$data[10]); return $question[$data[4]];}function check_5($data){ $question = array('A'=>$data[8],'B'=>$data[4],'C'=>$data[9],'D'=>$data[7]); if($question[$data[5]] == $data[5]) return true; return false;}function check_6($data){ $question = array('A'=>$data[2]==$data[4] && $data[4]==$data[8],'B'=>$data[1]==$data[6] && $data[6]==$data[8],'C'=>$data[3]==$data[10] && $data[10]==$data[8],'D'=>$data[5]==$data[9] && $data[9]=$data[8]); return $question[$data[6]]; }function check_7($data){ $question = array('A'=>'C','B'=>'B','C'=>'A','D'=>'D'); $count = array_count_values($data); arsort($count); if(array_pop(array_keys($count))==$question[$data[7]]) return true; return false;}function check_8($data){ $map = array('A'=>1,'B'=>2,'C'=>3,'D'=>4); $question = array('A'=>$data[7],'B'=>$data['5'],'C'=>$data['2'],'D'=>$data['10']); if(abs($map[$data[1]] - $map[$question[$data[8]]])>1) return true; return false;}function check_9($data){ $question = array('A'=>$data[6],'B'=>$data[10],'C'=>$data[2],'D'=>$data[9]); if(($question[$data[9]] == $data[5])!=($data[1] == $data[6]))return true; return false; }function check_10($data){ $question = array('A'=>3,'B'=>2,'C'=>4,'D'=>1); $count = array_count_values($data); arsort($count); $min = array_pop($count); asort($count); $max = array_pop($count); if($question[$data[10]] == $max-$min) return true; return false;}foreach($option as $v[1]){ foreach($option as $v[2]){ foreach($option as $v[3]){ foreach($option as $v[4]){ foreach($option as $v[5]){ foreach($option as $v[6]){ foreach($option as $v[7]){ foreach($option as $v[8]){ foreach($option as $v[9]){ foreach($option as $v[10]){ for($i=1;$i<=10;$i++){ $answer[$i] = $v[$i]; } for($i=1;$i<=10;$i++){ $func = "check_".$i; if(!$func($answer)) break; } if($i == 11) {echo implode(' ',$answer)."\r\n";die;} } } } } } } } } }}?>
结果输出:B C A C A C D A B A
应该是正确答案,不过用的是最简单的暴力破解算法,不过计算机不就是干这事儿的么.
当然算法还可以想其他方法比如动态规划等等.