返回

java-它总是说错误的答案

发布时间:2022-08-28 15:34:13 376
# 移动端

据说:有一天,阿里巴巴遇到了一个他无法解决的难题。这个谜题由4个数字组成,他的任务是检查他是否能用算术运算符(+,−,×)在其他三个数字之间;这样每个操作符只使用一次。一□b□c=d

仅输入一行,其中包含四个数字a、b、c和d(−109≤a、 b、c≤109),(−1018≤d≤1018).

“输出打印”;“是”;(不带引号)如果使用算术运算符获得第四个数字,否则,请打印;否“;(无引号)。

示例

输入

3 4 5 23

输出

输入

9 5 3 7

输出

输入

1 2 3 1

输出

这就是我的解决方案

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        if (aliBabaAndPuzzles(sc.nextDouble(), sc.nextDouble(), sc.nextDouble(), sc.nextDouble()))
            System.out.println("YES");
        else
            System.out.println("NO");
    }

    private static boolean aliBabaAndPuzzles(double a, double b, double c, double d) {
        char[] operations = {'+', '-', '*'};
        for (int i = 0; i < operations.length - 1; i++) {
            for (int j = i + 1; j < operations.length; j++) {
                if (calc(a, operations[i], b, operations[j], c) == d) {
                    return true;
                }
                if (calc(a, operations[j], b, operations[i], c) == d) {
                    return true;
                }
            }
        }
        return false;
    }

    private static double calc(double num1, char op1, double num2, char op2, double num3) {
        if (op2 == '/' || op2 == '*') return calc(num1, calc(num2, num3, op2), op1);
        return calc(calc(num1, num2, op1), num3, op2);
    }

    private static double calc(double num1, double num2, char op) {
        if (op == '+') return num1 + num2;
        else if (op == '-') return num1 - num2;
        else if (op == '*') return num1 * num2;
        else if (op == '/') return num1 / num2;
        else if (op == '%') return num1 % num2;
        else return 0;
    }

}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像