360 笔试 修复方程 AC代码

import java.util.Scanner;

/**
 * @author metaxylene 2022-9-9 17:25
 */
public class Main15 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        String[] strs = new String[n];
        for (int i = 0; i < strs.length; i++) {
            String[] leftAndRight = in.next().split("=");
            // 等式左边
            String left = leftAndRight[0];
            // 等式右边
            String right = leftAndRight[1];
            // 等式左边原始结果
            long leftRes = stringResult(left);
            // 等式右边原始结果
            long rightRes = stringResult(right);
            // 左边原始结果等于右边原始结果
            if (leftRes == rightRes) {
                System.out.println("Yes");
            } else {
                // 比较左右两边修改之后的结果
				// 此处需要优化为比较两边的原始结果大小再修改表达式,我这里纯粹着急了没想到
				
                // 等式左边进行修改
                if (equals(left, rightRes)) {
                    System.out.println("Yes");
                // 等式右边进行修改
                } else if (equals(right, leftRes)) {
                    System.out.println("Yes");
                // 都不对
                } else {
                    System.out.println("No");
                }
            }
        }
    }

    /**
     * 计算表达式结果
     */
    public static long stringResult(String left) {
        // 加号分割乘法表达式
        String[] LPlus = left.split("\\+");
        long sum = 0;
        for (int i = 0; i < LPlus.length; i++) {
            long res = 1;
            String[] temp = LPlus[i].split("\\*");
            // 计算乘法
            for (int j = 0; j < temp.length; j++) {
                res *= Long.parseLong(temp[j]);
            }
            // 计算加法
            sum += res;
        }
        return sum;
    }

    /**
     * 修改字符串数位,对有数字的地方后面加0-9(暴力)
     * 传入的s是表达式,another是另一边的计算结果
     */
    public static boolean equals(String s, long another) {
        StringBuilder sb = new StringBuilder();
        sb.append(s);
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            // 如果这一位是数字
            if (c >= '0' && c <= '9') {
                for (int j = 0; j < 10; j++) {
                    // 在这个数字后加0-9依次进行
                    sb.insert(i + 1, j + "");
                    // 加上数字之后计算结果如果和另一边相符 返回
                    if (stringResult(sb.toString()) == another) {
                        return true;
                    }
                    // 删除添加的数字
                    sb.delete(i + 1, i + 2);
                }
            }
        }
        return false;
    }
}

#360公司##笔试#
全部评论
大佬,那对于2 + 3 = 15,这个,只考虑在2的后面加0-9感觉有问题哈,这里的话,在2前面加1才可以哈
点赞 回复 分享
发布于 2022-09-09 22:51 北京
def check(s1, s2):     for i in range(10):         for pos in range(len(s1) + 1):             if (pos == 0 and i == 0)&nbs***bsp;(i == 0 and not ('0&(30533)#39; <= s1[pos - 1] <= '9&#39;)):                 continue             tmp = s1[:pos] + str(i) + s1[pos:]             if eval(tmp) == eval(s2):                 return True     return False T = int(input()) for _ in range(T):     s = input()     s = s.replace(' &(30184)#39;, '&#39;)     left, right = s.split('=&(31354)#39;)     if eval(left) == eval(right):         print("Yes")     else:         if check(left, right)&nbs***bsp;check(right, left):             print("Yes")         else:             print("No") 大佬,可以看看这个为什么错了么,只过了9%
点赞 回复 分享
发布于 2022-09-09 19:13 四川

相关推荐

评论
11
21
分享

创作者周榜

更多
牛客网
牛客企业服务