题解 | #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
    }
}

全部评论

相关推荐

西南山:哥,你的技能是在报菜单吗
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务