题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
static boolean rslt;
static int N =4;
static int[] arr;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
arr = new int[N];
while (scan.hasNextInt()) {
for(int i=0;i<arr.length;i++) {
arr[i]=scan.nextInt();
}
for(int i=0;i<arr.length;i++) {
f(i,arr[i], 1," "+i+" ");//path格式注意
}
System.out.println(rslt);
rslt=false;// ---复位
}
}
public static void f(int i, int s, int L, String path) {//L记录层数,path记录用过的数字,是积累的值
if(rslt)return;// ------短路
if(L==4 && s==24) {
rslt = true; //-----注意每次输出前要重制为false
return;
}
for(int j=0;j<N;j++) {
if(path.contains(" "+j+" ")) continue; //跳过已经使用的元素
String pth = path+j+" ";
f(j,s+arr[j],L+1,pth);
//注意减法两个值顺序交换结果不同
f(j,arr[j]-s,L+1,pth);
f(j,s-arr[j],L+1,pth);
f(j,s*arr[j],L+1,pth);
//注意除法两个值顺序交换结果不同,要求整除与判零
if(s!=0&&arr[j]%s==0)f(j,arr[j]/s,L+1,pth);
if(arr[j]!=0&&s%arr[j]==0)f(j,s/arr[j],L+1,pth);
}
}
}