问题描述
 
输入一行数字,以一个空格隔开,每行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