问题描述
输入一行数字,以一个空格隔开,每行4个数字,判断用这4个数字进行加减乘除运算,最终能否得到24,如果能,则输出YES 并输出计算公式,如果不能得到24,则输出NO。
读题
例: 输入:
1 5 5 5
输出:
(5-(1/5))*5
YES
代码
public static void main(String
[] args
) throws IOException
{
BufferedReader in
= new BufferedReader(new InputStreamReader(System
.in
));
String input
= null
;
while ((input
= in
.readLine()) != null
&& !"".equals(input
)) {
String
[] factors
= input
.split(" ");
double[] array
= new double[4];
for (int i
= 0; i
< 4; i
++) {
array
[i
] = Double
.parseDouble(factors
[i
]);
}
if (dfs(array
, 4, "")) {
System
.out
.println("YES");
} else {
System
.out
.println("NO");
}
}
}
private static boolean dfs(double[] num
, int s
, String str
) {
if (s
== 1) {
if (Math
.abs(num
[0] - 24) == 0) {
print(str
);
return true;
} else {
return false;
}
}
double a
;
double b
;
for (int i
= 0; i
< s
; i
++) {
for (int j
= i
+ 1; j
< s
; j
++) {
a
= num
[i
];
b
= num
[j
];
num
[j
] = num
[s
- 1];
num
[i
] = a
+ b
;
if (dfs(num
, s
- 1, str
+ "," + a
+ "+" + b
)) {
return true;
}
num
[i
] = a
- b
;
if (dfs(num
, s
- 1, str
+ "," + a
+ "-" + b
)) {
return true;
}
num
[i
] = b
- a
;
if (dfs(num
, s
- 1, str
+ "," + b
+ "-" + a
)) {
return true;
}
num
[i
] = a
* b
;
if (dfs(num
, s
- 1, str
+ "," + a
+ "*" + b
)) {
return true;
}
if (b
!= 0) {
num
[i
] = a
/ b
;
}
if (dfs(num
, s
- 1, str
+ "," + a
+ "/" + b
)) {
return true;
}
if (a
!= 0) {
num
[i
] = b
/ a
;
}
if (dfs(num
, s
- 1, str
+ "," + b
+ "/" + a
)) {
return true;
}
num
[i
] = a
;
num
[j
] = b
;
}
}
return false;
}
private static void print(String str
) {
String
[] strArr
= str
.split(",");
double a
= cal(strArr
[1]);
double b
= cal(strArr
[2]);
if (strArr
[2].contains(String
.valueOf(a
))) {
strArr
[2] = strArr
[2].replace(String
.valueOf(a
), "(" + strArr
[1] + ")");
}
if (strArr
[3].contains(String
.valueOf(b
))) {
strArr
[3] = strArr
[3].replace(String
.valueOf(b
), "(" + strArr
[2] + ")");
}
if (strArr
[3].contains(String
.valueOf(a
))) {
strArr
[3] = strArr
[3].replace(String
.valueOf(a
), "(" + strArr
[1] + ")");
}
System
.out
.println(strArr
[3].replace(".0",""));
}
private static double cal(String s
) {
if (s
.contains("+")) {
String
[] split
= s
.split("\\+");
return Double
.valueOf(split
[0]) + Double
.valueOf(split
[1]);
}
if (s
.contains("-")) {
String
[] split
= s
.split("-");
return Double
.valueOf(split
[0]) - Double
.valueOf(split
[1]);
}
if (s
.contains("*")) {
String
[] split
= s
.split("\\*");
return Double
.valueOf(split
[0]) * Double
.valueOf(split
[1]);
}
if (s
.contains("/")) {
String
[] split
= s
.split("/");
return Double
.valueOf(split
[0]) / Double
.valueOf(split
[1]);
}
return 0;
}
测试结果
转载请注明原文地址:https://ipadbbs.8miu.com/read-54340.html