HJ67 24点游戏算法
描述
给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利,除法指实数除法运算,运算符仅允许出现在两个数字之间,本题对数字选取顺序无要求,但每个数字仅允许使用一次,且需考虑括号运算
此题允许数字重复,如3 3 4 4为合法输入,此输入一共有两个3,但是每个数字只允许使用一次,则运算过程中两个3都被选取并进行对应的计算操作。
示例1
输入:
7 2 1 10
输出:
true
法一
import java.util.Scanner;
public class Main {
public static boolean[] visited = new boolean[4];
public static boolean flag = false;
public static int[] nums = new int[4];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
for (int i = 0 ; i < 4 ; i++) {
nums[i] = sc.nextInt();
}
dfs(0, 0 );
System.out.println(flag);
}
}
public static void dfs(int start, int sum ) {
if ((start == 4) && (sum == 24) ) {
flag = true;
} else {
start++;
for (int i = 0 ; i < 4 ; i++) {
if (!visited[i]) {
visited[i] = true;
dfs(start, sum += nums[i]);
dfs(start, sum -= nums[i]);
dfs(start, sum *= nums[i]);
dfs(start, sum /= nums[i]);
visited[i] = false;
}
}
}
}
}