题目如下:
package com.freedom.demo.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @author tobebetter9527
* @description 蛮力猜测
* @create 2020/05/16 2:28
*/
public class GuessPassword {
public static void main(String[] args) {
List<DataModel> dataModels = new ArrayList<>();
dataModels.add(new DataModel(Arrays.asList(6, 8, 2), 1, 1));
dataModels.add(new DataModel(Arrays.asList(6, 1, 4), 1, 0));
dataModels.add(new DataModel(Arrays.asList(2, 0, 6), 2, 0));
dataModels.add(new DataModel(Arrays.asList(7, 3, 8), 0, 0));
dataModels.add(new DataModel(Arrays.asList(8, 7, 0), 1, 0));
Set<Integer> set = new HashSet<>();
for (DataModel data : dataModels) {
set.addAll(data.getList());
}
List<Integer> dataPool = new ArrayList<>(set);
for (int i = 0; i < dataPool.size(); i++) {
for (int j = 0; j < dataPool.size(); j++) {
for (int k = 0; k < dataPool.size(); k++) {
List<Integer> guessList = new ArrayList<>();
guessList.add(dataPool.get(i));
guessList.add(dataPool.get(j));
guessList.add(dataPool.get(k));
int size = 0;
for (DataModel data : dataModels) {
boolean b = data.checkDataModel(guessList);
if (b) {
size++;
} else {
break;
}
}
if (size == dataModels.size()) {
System.out.println(guessList);
}
}
}
}
}
static class DataModel {
private List<Integer> list;
// 号码正确的个数
private int valueNum;
// 位置正确的个数
private int positionNum;
private Set<Integer> set;
public DataModel(List<Integer> list, int valueNum, int positionNum) {
this.list = list;
this.valueNum = valueNum;
this.positionNum = positionNum;
this.set = new HashSet<>(list);
}
public boolean checkDataModel(List<Integer> guessList) {
boolean b = checkValueNum(guessList);
boolean b1 = checkPositionNum(guessList);
return b && b1;
}
private boolean checkValueNum(List<Integer> guessList) {
int i = 0;
for (Integer integer : guessList) {
if (set.contains(integer)) {
i++;
}
}
return valueNum == i;
}
private boolean checkPositionNum(List<Integer> guessList) {
int i = 0;
for (int j = 0; j < guessList.size(); j++) {
Integer integer = guessList.get(j);
Integer integer1 = list.get(j);
if (integer.equals(integer1)) {
i++;
}
}
return positionNum == i;
}
public List<Integer> getList() {
return list;
}
}
}
上面题目的结果:042.