java题目HJ67 24点游戏算法
描述
给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利,除法指实数除法运算,运算符仅允许出现在两个数字之间,本题对数字选取顺序无要求,但每个数字仅允许使用一次,且需考虑括号运算
此题允许数字重复,如3 3 4 4为合法输入,此输入一共有两个3,但是每个数字只允许使用一次,则运算过程中两个3都被选取并进行对应的计算操作。
输入描述:
读入4个[1,10]的整数,数字允许重复,测试用例保证无异常数字。
输出描述:
对于每组案例,输出一行表示能否得到24点,能输出true,不能输出false
示例1
输入:
7 2 1 10
输出:
true
1 import java.util.*; 2 import java.io.*; 3 public class Main{ 4 static int[] nums = new int[4]; // 存放输入数字 5 static boolean[] visit = new boolean[4]; // 存放对应位置数字是否使用标志 6 static int flag = 0; 7 8 public static void main(String[] args){ 9 Scanner sc = new Scanner(System.in); 10 while(sc.hasNext() && flag ==0){ 11 String[] input = sc.nextLine().split(" "); 12 for(int i = 0; i < 4; i ++) 13 nums[i] = Integer.parseInt(input[i]); 14 dfs(0, 0); 15 System.out.println( flag == 1 ); 16 } 17 } 18 19 // tmp是前面n个数字运算结果,u表示已经使用了多少个数字 20 public static boolean dfs(int u, float tmp) { 21 //递归出口,数字已用完且结果为24 22 if(u == 4 && tmp ==24) { 23 flag = 1; 24 return true; 25 } 26 27 // 对四个数字递归 28 for(int i = 0; i < 4; i++) { 29 if(visit[i] == false) { // 当前数字标志位是:未使用 30 visit[i] = true; // 更新为已使用 31 if(dfs(u+1, tmp + nums[i]) || 32 dfs(u+1, tmp - nums[i]) || 33 dfs(u+1, tmp * nums[i]) || 34 dfs(u+1, tmp / nums[i])) { 35 return true; 36 } 37 // 相当于回溯 38 visit[i] = false; 39 } 40 } 41 return false; 42 } 43 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix