题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int[]nums=new int[4];
for(int i=0;i<4;i++)
nums[i]=in.nextInt();
boolean[]vis=new boolean[4];
boolean ans=false;
//这里只需要一次递归即可,在递归里面for循环判断
if(dfs(vis,nums,0))
System.out.println(true);
else System.out.println(false);
}
public static boolean dfs(boolean[]vis,int[]nums,int cur)
{
boolean four=true;
for(int i=0;i<4;i++)
{
//判断是否四个数都访问完了
if(!vis[i]){
four=false;
break;
}
}
if(four)
return cur==24;//返回是否为24
for(int i=0;i<nums.length;i++)
{
if(!vis[i])
{
vis[i]=true;//标记这个数字为已经访问
if(dfs(vis,nums,cur+nums[i])||
dfs(vis,nums,cur-nums[i])||dfs(vis,nums,cur*nums[i])
||nums[i]!=0&&cur%nums[i]==0&& dfs(vis,nums,cur%nums[i]))
return true;
vis[i]=false;//回溯
}
}
return false;//如果走出了所有的,说明不存在24点,返回false
}
}


