修复方程的问题可以通过以下步骤解决:
输入读取
首先读取方程的数量 `n`。
然后读取每个方程,并将其存储在字符串数组 `strs` 中。
解析方程
对于每个方程,将其分割成左右两部分,分别存储在 `leftPart` 和 `rightPart` 中。
计算左右两部分的原始结果 `leftRes` 和 `rightRes`。
比较结果
如果原始结果相等,则输出 "Yes"。
如果不相等,则比较左右两边的数值,尝试通过插入一个数位使得方程成立。
插入数位
将0到9之间的数插入到 `leftPart` 或 `rightPart` 的开头或末尾。
计算插入数位后的结果,并与另一边进行比较。
输出结果
如果通过插入数位使得方程成立,则输出 "Yes"。
否则,输出 "No"。
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int i = 0; i < T; i++) {
String equa = sc.next();
boolean res = canMakeEquationTrue(equa);
if (res) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
sc.close();
}
private static boolean canMakeEquationTrue(String equa) {
String[] parts = equa.split("=");
String leftPart = parts;
String rightPart = parts;
long leftV = getValue(leftPart);
long rightV = getValue(rightPart);
if (leftV == rightV) {
return true;
} else if (leftV < rightV) {
return changeExpression(leftPart, rightV);
} else {
return changeExpression(rightPart, leftV);
}
}
private static long getValue(String part) {
long value = 0;
boolean isNumber = true;
for (char c : part.toCharArray()) {
if (Character.isDigit(c)) {
value = value * 10 + (c - '0');
} else {
isNumber = false;
break;
}
}
return isNumber ? value : Long.parseLong(part);
}
private static boolean changeExpression(String part, long target) {
for (int i = 0; i <= part.length(); i++) {
String temp = part.substring(0, i) + (i < part.length() ? part.substring(i, i + 1) : "0") + part.substring(i + 1);
long newValue = getValue(temp);
if (newValue == target) {
return true;
} else if (newValue > target) {
return false;
}
}
return false;
}
}
```
解释
输入读取
`int T = sc.nextInt();` 读取方程数量。
`String[] strs = new String[n];` 存储每个方程。
解析方程
`String[] parts = equa.split("=");` 将方程分割成左右两部分。
`long leftV = getValue(leftPart);` 和 `long rightV = getValue(rightPart);` 计算左右两部分的原始结果。
比较结果
如果 `leftV == rightV`,则方程成立。
如果 `leftV < rightV`,则尝试通过插入一个数位使得 `leftV` 变为 `rightV`。
如果 `leftV > rightV`,则尝试通过插入一个数位使得 `rightV` 变为 `leftV`。
插入数位
`String temp = part.substring(0, i) + (i < part.length() ? part.substring(i, i + 1) : "0") + part.substring(i + 1);` 在不同位置插入