题目描述
问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利
输入:
4个1-10的数字。[数字允许重复,测试用例保证无异常数字]
输出:
true or false
输入描述:
输入4个int整数
输出描述:
返回能否得到24点,能输出true,不能输出false
输入例子:
7 2 1 10
输出例子:
true
下面为笔者给出的JAVA实现。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static boolean isTrue = false;
static void cal(int[] num, int flag, double sum) {
if (flag == 3) {
if (sum == 24) {
// System.out.println("true");
isTrue = true;
}
return;
}
if (!isTrue) {
flag++;
cal(num, flag, sum + num[flag]);
cal(num, flag, sum - num[flag]);
cal(num, flag, sum * num[flag]);
cal(num, flag, sum / num[flag]);
}
}
public static void quanpaixu(int[] a) {
// 检查排序是够完成
boolean wancheng = true;
while (wancheng) {
wancheng = false;
for (int i = 0; i < 3; i++) {
if (a[i] < a[i + 1]) {
wancheng = true;
break;
}
}
if (!wancheng)
break;
// qiu j
int j = 0;
for (int i = 2; i >= 0; i--) {
if (a[i] < a[i + 1]) {
j = i;
break;
}
}
// 求k
int min = 11;
int k = 0;
for (int www = j + 1; www < 4; www++) {
if (min > a[www] && a[www] > a[j]) {
min = a[www];
k = www;
}
}
// 交换k,j
int temp = a[k];
a[k] = a[j];
a[j] = temp;
for (int www = 0; www < (4 - j - 1) / 2; www++) {
temp = a[j + 1 + www];
a[j + 1 + www] = a[4 - www - 1];
a[3 - www] = temp;
}
cal(a, 0, 0);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] a = new int[4];
while (scanner.hasNext()) {
for (int i = 0; i < 4; i++) {
a[i] = scanner.nextInt();
}
Arrays.sort(a);
quanpaixu(a);
if (isTrue) {
System.out.println("true");
} else
System.out.println("false");
}
}
}