通过递归判断list中的元素能否通过+-*/运算得到特定的数字n,从list中取出值和n进行+-*/运算以得到新的n值,再用移除该值得新list和新n进行递归判断,判断条件是list中只剩余一个元素,且该元素的值为n。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 4; i++) {
list.add(sc.nextInt());
}
System.out.println(computeNum(list, 24));
}
//判断列表list中的元素能否通过运算得到数字n
public static boolean computeNum(List<Integer> list, int n) {
if (list.size() == 1) {
return list.get(0) == n;
}
//循环遍历列表中的值
for (int i = 0; i < list.size(); i++) {
int k = list.get(i);
//用一个临时列表储存其它的值
List<Integer> tempList = new ArrayList<>(list);
tempList.remove(i);
//用临时列表 和 n与遍历的值k进行(+-*/)运算得出的新值 进行递归调用
if (computeNum(tempList, n + k)) {
return true;
}
if (computeNum(tempList, n - k)) {
return true;
}
if (computeNum(tempList, n * k)) {
return true;
}
if (n % k == 0 && computeNum(tempList, n / k)) {
return true;
}
}
return false;
}
}

京公网安备 11010502036488号