【Java】2018年刑偵科推理試卷
今早同事發的圖片,2018刑偵科推理試卷。
下午沒什麼事,就用Java寫了一下,大概的思路是列舉法,然後列出條件,輸出滿足條件的情況就可以了。參考的是這位大神寫的python的,唉,本人能力有限,所以可能程式碼會比較冗餘。但是也想鍛鍊一下,於是乎,寫了一套Java的。有什麼地方可以簡化程式碼啥的,歡迎指正哈!
https://www.cnblogs.com/seyjs/p/8491767.html
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class calculate {
/**
* 拆分驗證
* @param list 選項集合
* @return
*/
public static boolean check(List<String> list){
if(!check3(list)){
return false;
}
if(!check4(list)){
return false;
}
if(!check5(list)){
return false;
}
if(!check6(list)){
return false;
}
if(!check7(list)){
return false;
}
if(!check8(list)){
return false;
}
if(!check9(list)){
return false;
}
if(!check10(list)){
return false;
}
return true;
}
public static boolean check3(List<String> list){
String str = list.get(2);
if(str.equals("A")){//24,26,46
//13,15,35
return (list.get(1).equals(list.get(3))&&list.get(1).equals(list.get(5))&&list.get(3).equals(list.get(5)));
}
if(str.equals("B")){//23,24,34
//12,13,23
return (list.get(1).equals(list.get(2))&&list.get(1).equals(list.get(3))&&list.get(2).equals(list.get(3)));
}
if(str.equals("C")){//34,36,46
//23,25,35
return (list.get(2).equals(list.get(3))&&list.get(2).equals(list.get(5))&&list.get(3).equals(list.get(5)));
}
if(str.equals("D")){//23,26,36
//12,15,25
return (list.get(1).equals(list.get(2))&&list.get(1).equals(list.get(5))&&list.get(2).equals(list.get(5)));
}
return false;
}
private static boolean check4(List<String> list) {
String str = list.get(3);
if(str.equals("A")){
return list.get(0).equals(list.get(4));
}
if(str.equals("B")){
return list.get(1).equals(list.get(6));
}
if(str.equals("C")){
return list.get(0).equals(list.get(8));
}
if(str.equals("D")){
return list.get(5).equals(list.get(9));
}
return false;
}
private static boolean check5(List<String> list) {
String str = list.get(4);
if(str.equals("A")){
return list.get(4).equals(list.get(7));
}
if(str.equals("B")){
return list.get(4).equals(list.get(3));
}
if(str.equals("C")){
return list.get(4).equals(list.get(8));
}
if(str.equals("D")){
return list.get(4).equals(list.get(6));
}
return false;
}
private static boolean check6(List<String> list) {
String str = list.get(5);
if(str.equals("A")){//82,84,24
return (list.get(7).equals(list.get(1))&&list.get(7).equals(list.get(3))&&list.get(2).equals(list.get(3)));
}
if(str.equals("B")){//81,86,16
return (list.get(7).equals(list.get(0))&&list.get(7).equals(list.get(5))&&list.get(0).equals(list.get(5)));
}
if(str.equals("C")){//83,810,310
return (list.get(7).equals(list.get(2))&&list.get(7).equals(list.get(9))&&list.get(2).equals(list.get(9)));
}
if(str.equals("D")){//85,89,59
return (list.get(7).equals(list.get(4))&&list.get(7).equals(list.get(8))&&list.get(4).equals(list.get(8)));
}
return false;
}
private static boolean check7(List<String> list) {
String str = list.get(6);
int countA = Collections.frequency(list, "A");
int countB = Collections.frequency(list, "B");
int countC = Collections.frequency(list, "C");
int countD = Collections.frequency(list, "D");
List<Integer> l = new ArrayList<Integer>();
l.add(countA);
l.add(countB);
l.add(countC);
l.add(countD);
int a = Collections.min(l);
if(str.equals("A")){
return a==countC;
}
if(str.equals("B")){
return a==countB;
}
if(str.equals("C")){
return a==countA;
}
if(str.equals("D")){
return a==countD;
}
return false;
}
private static boolean check8(List<String> list) {
String[] numArray = new String[]{"A","B","C","D"};
List<String> l = Arrays.asList(numArray);
String str = list.get(7);
String str1 = list.get(0);
if(str.equals("A")){
String s = list.get(6);
return (Math.abs(l.indexOf(str1)-l.indexOf(s))<0)||(Math.abs(l.indexOf(str1)-l.indexOf(s))>1);
}
if(str.equals("B")){
String s = list.get(4);
return (Math.abs(l.indexOf(str1)-l.indexOf(s))<0)||(Math.abs(l.indexOf(str1)-l.indexOf(s))>1);
}
if(str.equals("C")){
String s = list.get(1);
return (Math.abs(l.indexOf(str1)-l.indexOf(s))<0)||(Math.abs(l.indexOf(str1)-l.indexOf(s))>1);
}
if(str.equals("D")){
String s = list.get(9);
return (Math.abs(l.indexOf(str1)-l.indexOf(s))<0)||(Math.abs(l.indexOf(str1)-l.indexOf(s))>1);
}
return false;
}
private static boolean check9(List<String> list) {
String str = list.get(8);
boolean s = list.get(0).equals(list.get(5));
if(str.equals("A")){
return !s==list.get(5).equals(list.get(4));
}
if(str.equals("B")){
return !s==list.get(9).equals(list.get(4));
}
if(str.equals("C")){
return !s==list.get(1).equals(list.get(4));
}
if(str.equals("D")){
return !s==list.get(8).equals(list.get(4));
}
return false;
}
private static boolean check10(List<String> list) {
String str = list.get(9);
int countA = Collections.frequency(list, "A");
int countB = Collections.frequency(list, "B");
int countC = Collections.frequency(list, "C");
int countD = Collections.frequency(list, "D");
List<Integer> l = new ArrayList<Integer>();
l.add(countA);
l.add(countB);
l.add(countC);
l.add(countD);
int a = Collections.min(l);
int b = Collections.max(l);
if(str.equals("A")){
return b-a==3;
}
if(str.equals("B")){
return b-a==2;
}
if(str.equals("C")){
return b-a==4;
}
if(str.equals("D")){
return b-a==1;
}
return false;
}
public static void main(String[] args) {
//可選選項
String[] numArray = new String[]{"A","B","C","D"};
//窮舉每一次產生的一條選項結果
String[] initArray = new String[]{"A","A","A","A","A","A","A","A","A","A"};
List<String> selectList = Arrays.asList(initArray);
for(String a : numArray){
selectList.set(0,a);
for(String b : numArray){
selectList.set(1,b);
for(String c : numArray){
selectList.set(2,c);
for(String d : numArray){
selectList.set(3,d);
for(String e : numArray){
selectList.set(4,e);
for(String f : numArray){
selectList.set(5,f);
for(String g : numArray){
selectList.set(6,g);
for(String h : numArray){
selectList.set(7,h);
for(String i : numArray){
selectList.set(8,i);
for(String j : numArray){
selectList.set(9,j);
boolean result = check(selectList);
if(result==true){
System.out.println("結果為:"+selectList.toString());
}
}
}
}
}
}
}
}
}
}
}
System.out.println("over");
}
}
輸出結果為:
結果為:[B, C, A, C, A, C, D, A, B, A]
over
相關推薦
【Java】2018年刑偵科推理試卷
今早同事發的圖片,2018刑偵科推理試卷。 下午沒什麼事,就用Java寫了一下,大概的思路是列舉法,然後列出條件,輸出滿足條件的情況就可以了。參考的是這位大神寫的python的,唉,本人能力有限,所以可能程式碼會比較冗餘。但是也想鍛鍊一下,於是乎,寫了一套
2018年刑偵科推理試題 python實現
HR lag OS python 真的 bit continue image flag 這題越推越覺得應該用程序寫,所以就用python寫了一個,為什麽用python,因為真的很方便。 先看看理論上是否可行,10道題,每題4個選項,也就是4的10次冪,2的20次冪,也
2018年刑偵科推理試題(C++)
def oid set 算法 mtime abs signed lock c++11 上學期看到2018年刑偵科推理試題,直覺告訴我可以嵌套N層for循環來解答,但後面還是用組合算法窮舉出所有組合算到答案,嵌套太深不好搞啊。 從 0b00000000000000000000
離散數學:2018年刑偵科推理試題
答案是:BCACACDABA 先來看看網上大神的做法: 下邊是自己的解題過程,每一步的註釋已經寫得很詳細,思路相對很清晰都能看懂,所以不再贅述,這裡教學平臺只能提交C所以需要java的自己稍作修改吧沒什麼區別 #include<std
【python】對於程式設計師來說,2018刑偵科推理試卷是問題麼?
最近網上很火的2018刑偵科推理試卷,題目確實很考驗人邏輯思維能力。 可是對於程式設計師來說,這根本不是問題。寫個程式用窮舉法計算一遍即可,太簡單。 import itertools class Solution(object): answer = [] def check3(self):
2018刑偵科推理試卷 Java寫法
package com.test.problem;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.HashMap;import ja
【20180312】2018年03月12日(隨想)
post 而是 有一個 然而 clas OS you pos 一個 今天有一個熱點事件,在幾個群裏都有提及。 我以為是假的。沒想到是真的。果然還是太young了。 總結: 有的事,你認為是假的,它是真的。比如今天的焦點事件。 有的事,你認為一定是假的,偏偏是真
【翻譯】2018年,20大Python資料科學庫都做了哪些更新?
Python今年依舊保持著資料科學領域的領先地位。去年,我們在部落格上列出了15個頂級Python資料科學庫的榜單,當時大家都覺得非常好。這次,介紹一下這些頂級資料科學Python庫今年有哪些更新,同時,我們還為這個榜單添加了一些新庫。 實際上,這次的榜單不止20個庫,主要
【收藏】2018年不容錯過的20大人工智慧/機器學習/計算機視覺等頂會時間表
點選有驚喜 目錄 人工智慧/機器學習計算機視覺/模式識別自然語言處理/計算語言學體系結構資料探勘/資訊檢索計算機圖形學 人工智慧/機器學習 1. AAAI 2018 會議時間:2月2日~7日 會議地點: 新奧爾良市,美國 AAAI是人工智慧領域的主要學術
【自考】-2018年10月自考總結
自考總結: 這次考試就報考了一科C ++程式設計,自學考試也就接近尾聲了。加上之前考的學位英語和實踐課,畢業設計。自考也就結束了。 總結一下學習C ++的著重點吧。
【雜感】2018年的秋天回顧
前言 好久沒寫部落格,我一直都覺得寫部落格說明最近很在學習狀態阿。也說明確實很久都沒在狀態了。 終於穿上了秋褲,冬天和暖氣都小跑著趕來了,我的大學時光也所剩無多,我在這裡隨便記下兩三言,願之後依然能想起此刻的心情。 秋招 8月中從深圳回到學校,一邊等轉正的結果,一邊投了幾家別
【面試題】2018年最全Java面試通關秘籍第五套!
XA 中文分詞 coo div rop 為什麽 3.2 自旋 FQ 【面試題】2018年最全Java面試通關秘籍第五套! 原創 2018-04-26 徐劉根 Java後端技術 第一套:《2018年最全Java面試通關秘籍第一套!》 第二套:《2018年最全Java面試通
【備忘】2018年 java入門進階主流框架學習到架構與電商專案實戰
0001-多執行緒快速入門.zip 0002-多執行緒執行緒安全.zip 0003-多執行緒之間通訊.zip 0004-java併發包與併發佇列.zip 0005-執行緒池原理剖析與鎖的深度化.zip 0006-資料交換格式與反射機制與SpringIOC原理分析.zip 00
【備忘】2018年最新Java微服務原理課程與改造房產銷售平臺視訊教程
第1章 課程介紹(一線網際網路架構師親授第2章 單體架構之專案概要設計&資料表設計第3章 單體架構之SpringBoot工程框架搭建與技巧第4章 單體架構之使用者註冊及個人頁面功能開發第5章 單體架構之房產和推薦功能開發(分頁元件、Ajax、Redis)第6章 單
【老男孩教育】2018年最新版大數據開發課程表
企業 style linu zookeepe family pan storm 大數據分析 zook 老男孩教育大數據開發課程適合所有對大數據開發有興趣的人員,從JavaSE 到大數據生態圈高端課程的開發。課程內容量很大,有一定的難度和深度,認真學習,,技術會有很大程度的提
【異周話題 第 16 期】2018年,你最期待的前端開發技術有哪些?
pes 社區 發展 col roc ava 前端技術 試用 帶來 【異周話題 第 16 期】2018年,你最期待的前端開發技術有哪些?話題背景2017年已經過去,2018年如約而至。2017年在前端領域裏,react已經逐漸占據主流,Angular 發布了 v4 以及 v5
【程序員劄記#學習&&塑形# 】2018年5月21號
width title gray 繼續 ali 粉絲 tro margin post 2018年警醒 對於2018年,我的願望:繼續深挖機器學習領域,繼續學習高等數學、文學,堅持跑步、健身、控制飲食。 現在要做的事情:“戒酒&
【程序員劄記#學習&&塑形# 】2018年5月24號
round href hang border ttext HR -- chang 規劃 2018年警醒 對於2018年,我的願望:繼續深挖機器學習領域,繼續學習高等數學、文學,堅持跑步、健身、控制飲食。 感悟 今天想到了
【程序員劄記#學習&&塑形# 】2018年06月11號-15號
back IT www. property prop ima 深度 OS 落地 2018年警醒 對於2018年,我的願望:繼續深挖機器學習領域,繼續學習高等數學、文學,堅持跑步、健身、控制飲食。 Todo List 目