前一段时间在网上看到一篇刑侦推理试题,还上了微博热搜。
后来想到既然是逻辑推理不如让计算机推好了,由于一直在外地出差也没有时间写程序,恰好这周末有空就写了一下,好久没写过代码了就当练练手了。先给大家看一下试题题目吧,如图:
不知道大家看完之后什么感受,有网友十来分钟就推出来结果了。有兴趣的同学也可以自己试着推一下。文章最后有答案,推出来之后可以核对一下。
我是懒得动脑子推理了,就写段代码让程序推吧,坐等程序输出结果就可以了,因为没考虑代码优化的问题,毕竟只是想看一下这道题的结果而已,所以代码显得比较臃肿,时间复杂度也很高 O(n^10),话不多说了直接贴代码啦!!!
package com.yss.test;
public class Solution {
static int counts = 0;
static long startTime = 0;
public static void main(String[] args) {
startTime = System.currentTimeMillis();
String[] resultList = new String[]{"A","B","C","D"};
for (String firstAnswer : resultList) {
for (String secondAnswer : resultList) {
for (String thirdAnswer : resultList) {
for (String fourthAnswer : resultList) {
for (String fifthAnswer : resultList) {
for (String sixthAnswer : resultList) {
for (String seventhAnswer : resultList) {
for (String eighthAnswer : resultList) {
for (String ninthAnswer : resultList) {
for (String tenthAnswer : resultList) {
String[] answerList = new String[10];
answerList[0] = firstAnswer;
answerList[1] = secondAnswer;
answerList[2] = thirdAnswer;
answerList[3] = fourthAnswer;
answerList[4] = fifthAnswer;
answerList[5] = sixthAnswer;
answerList[6] = seventhAnswer;
answerList[7] = eighthAnswer;
answerList[8] = ninthAnswer;
answerList[9] = tenthAnswer;
if(check(answerList)){
for (int i = 0; i < answerList.length; i++) {
System.out.println("第"+(i+1)+"题的答案是"+answerList[i]);
}
long endTime = System.currentTimeMillis();
System.out.println("耗时:"+(endTime - startTime)+"ms");
System.exit(0);
}
}
}
}
}
}
}
}
}
}
}
}
private static boolean check(String[] answerList) {
// System.out.println("计算次数" + counts++);
if(!checkSecondQuestion(answerList)){
return false;
}else if(!checkThirdQuestion(answerList)){
return false;
}else if(!checkFourthQuestion(answerList)){
return false;
}else if(!checkFifthQuestion(answerList)){
return false;
}else if(!checkSixthQuestion(answerList)){
return false;
}else if(!checkSeventhQuestion_TenthQuestion(answerList)){
return false;
}else if(!checkEighthQuestion(answerList)){
return false;
}else if(!checkNinthQuestion(answerList)){
return false;
}else{
return true;
}
}
public static boolean checkSecondQuestion(String[] answerList) {
if("A".equals(answerList[1])){
if("C".equals(answerList[4])){
return true;
}else return false;
}else if("B".equals(answerList[1])){
if("D".equals(answerList[4])){
return true;
}else return false;
}else if("C".equals(answerList[1])){
if("A".equals(answerList[4])){
return true;
}else return false;
}else if("D".equals(answerList[1])){
if("B".equals(answerList[4])){
return true;
}else return false;
}else{
return false;
}
}
public static boolean checkThirdQuestion(String[] answerList) {
if("A".equals(answerList[2])){
if(!"A".equals(answerList[5]) && !"A".equals(answerList[1]) && !"A".equals(answerList[3])){
return true;
}else return false;
}else if("B".equals(answerList[2])){
if(!answerList[5].equals(answerList[2]) && !answerList[5].equals(answerList[1]) && !answerList[5].equals(answerList[3])){
return true;
}else return false;
}else if("C".equals(answerList[2])){
if(!answerList[1].equals(answerList[2]) && !answerList[1].equals(answerList[5]) && !answerList[1].equals(answerList[3])){
return true;
}else return false;
}else if("D".equals(answerList[2])){
if(!answerList[3].equals(answerList[2]) && !answerList[3].equals(answerList[5]) && !answerList[3].equals(answerList[1])){
return true;
}else return false;
}else{
return false;
}
}
public static boolean checkFourthQuestion(String[] answerList) {
if("A".equals(answerList[3])){
if(answerList[0].equals(answerList[4])){
return true;
}else return false;
}else if("B".equals(answerList[3])){
if(answerList[1].equals(answerList[6])){
return true;
}else return false;
}else if("C".equals(answerList[3])){
if(answerList[0].equals(answerList[8])){
return true;
}else return false;
}else if("D".equals(answerList[3])){
if(answerList[5].equals(answerList[9])){
return true;
}else return false;
}else{
return false;
}
}
public static boolean checkFifthQuestion(String[] answerList) {
if("A".equals(answerList[4])){
if("A".equals(answerList[7])){
return true;
}else return false;
}else if("B".equals(answerList[4])){
if("B".equals(answerList[3])){
return true;
}else return false;
}else if("C".equals(answerList[4])){
if("C".equals(answerList[8])){
return true;
}else return false;
}else if("D".equals(answerList[4])){
if("D".equals(answerList[6])){
return true;
}else return false;
}else{
return false;
}
}
public static boolean checkSixthQuestion(String[] answerList) {
if("A".equals(answerList[5])){
if(!answerList[1].equals(answerList[7]) || !answerList[3].equals(answerList[7])){
return false;
}else return true;
}else if("B".equals(answerList[5])){
if(!answerList[0].equals(answerList[7]) || !answerList[5].equals(answerList[7])){
return false;
}else return true;
}else if("C".equals(answerList[5])){
if(!answerList[2].equals(answerList[7]) || !answerList[9].equals(answerList[7])){
return false;
}else return true;
}else if("D".equals(answerList[5])){
if(!answerList[4].equals(answerList[7]) || !answerList[8].equals(answerList[7])){
return false;
}else return true;
}else{
return false;
}
}
/**
* 验证第七题和第十题
* @param answerList
* @return
*/
public static boolean checkSeventhQuestion_TenthQuestion(String[] answerList) {
int countA = 0 , countB = 0 ,countC = 0 ,countD = 0;
for (int i = 0; i < answerList.length; i++) {
if("A".equals(answerList[i])){
countA++;
}else if("B".equals(answerList[i])){
countB++;
}else if("C".equals(answerList[i])){
countC++;
}else if("D".equals(answerList[i])){
countD++;
}
}
int countArray[]={countA,countB,countC,countC,countD};
int mix = countArray[0];
int max = countArray[0];
for (int i = 0; i < countArray.length; i++) {
if(countArray[i] < mix){
mix = countArray[i];
}
if(countArray[i] > max){
max = countArray[i];
}
}
int difference = max - mix ;
if("A".equals(answerList[6])){
if(countC == mix){
return checkTenthQuestion(difference, answerList);
}else return false;
}else if("B".equals(answerList[6])){
if(countC == mix){
return checkTenthQuestion(difference, answerList);
}else return false;
}else if("C".equals(answerList[6])){
if(countA == mix){
return checkTenthQuestion(difference, answerList);
}else return false;
}else if("D".equals(answerList[6])){
if(countD == mix){
return checkTenthQuestion(difference, answerList);
}else return false;
}else{
return false;
}
}
/**
* 已知第八题的答案与第一题的答案不相邻,
* 用ASCII码计算,既不相邻那么ASCII码加一或者减一 必然也不会等于第一题答案的ASCII码
* @param answerList
* @return
*/
public static boolean checkEighthQuestion(String[] answerList) {
//首先获取第 一,第七,第五,第二,第十题的ASCII码
int ascii_answer1 = (int)answerList[0].toCharArray()[0];
int ascii_answer7 = (int)answerList[6].toCharArray()[0];
int ascii_answer5 = (int)answerList[4].toCharArray()[0];
int ascii_answer2 = (int)answerList[1].toCharArray()[0];
int ascii_answer10 = (int)answerList[9].toCharArray()[0];
//做判断
if("A".equals(answerList[7])){
if(ascii_answer1 != ascii_answer7 + 1 || ascii_answer1 != ascii_answer7 - 1){
return true;
}else return false;
}else if("B".equals(answerList[7])){
if(ascii_answer1 != ascii_answer5 + 1 || ascii_answer1 != ascii_answer5 - 1){
return true;
}else return false;
}else if("C".equals(answerList[7])){
if(ascii_answer1 != ascii_answer2 + 1 || ascii_answer1 != ascii_answer2 - 1){
return true;
}else return false;
}else if("D".equals(answerList[7])){
if(ascii_answer1 != ascii_answer10 + 1 || ascii_answer1 != ascii_answer10 - 1){
return true;
}else return false;
}else {
return false;
}
}
public static boolean checkNinthQuestion(String[] answerList) {
if("A".equals(answerList[8])){
if(answerList[0].equals(answerList[5]) != answerList[5].equals(answerList[4])){
return true;
}else return false;
}else if("B".equals(answerList[8])){
if(answerList[0].equals(answerList[5]) != answerList[9].equals(answerList[4])){
return true;
}else return false;
}else if("C".equals(answerList[8])){
if(answerList[0].equals(answerList[5]) != answerList[1].equals(answerList[4])){
return true;
}else return false;
}else if("D".equals(answerList[8])){
if(answerList[0].equals(answerList[5]) != answerList[8].equals(answerList[4])){
return true;
}else return false;
}else {
return false;
}
}
/**
* 在这里第十题和第七题类似,所以就可以直接放在第七题的方法处调用
* @param difference
* @param answerList
* @return
*/
public static boolean checkTenthQuestion(int difference,String[] answerList) {
if("A".equals(answerList[9])){
if(difference == 3) return true;
else return false;
}else if("B".equals(answerList[9])){
if(difference == 2) return true;
else return false;
}else if("C".equals(answerList[9])){
if(difference == 4) return true;
else return false;
}else if("D".equals(answerList[9])){
if(difference == 1) return true;
else return false;
}else{
return false;
}
}
}
以上就是全部代码,代码写完之后就执行一下看看结果吧
程序执行耗时123ms,还算是比较快的。