java实现1口2口3口4口5口6口7口8口9口10=100。 在口中插入+或-,不插入则表示连接,使得最终运算结果等100,但数字顺序不能改变。4如1+2+3+4+5+6+78-9+10=100;1+2+3+4+56+7+8+9+10=100;等
时间: 2023-08-14 12:03:28 浏览: 156
在1、2、3...9(保持这个顺序)之间可任意放+或者-或者不放,使其结果等于100,输出所有可能的放法。
4星 · 用户满意度95%
这是一个比较有趣的问题,可以用暴力搜索来解决。下面是 Java 实现代码:
```java
public class Main {
public static void main(String[] args) {
String digits = "12345678910";
int target = 100;
String[] operators = {"+", "-", ""};
List<String> expressions = new ArrayList<>();
generateExpressions(digits, operators, "", expressions);
for (String expression : expressions) {
if (evaluateExpression(expression) == target) {
System.out.println(expression + "=" + target);
}
}
}
private static void generateExpressions(String digits, String[] operators, String expression, List<String> expressions) {
if (digits.length() == 0) {
expressions.add(expression);
return;
}
for (int i = 1; i <= digits.length(); i++) {
String numStr = digits.substring(0, i);
String remainingDigits = digits.substring(i);
for (String op : operators) {
generateExpressions(remainingDigits, operators, expression + op + numStr, expressions);
}
}
}
private static int evaluateExpression(String expression) {
String[] tokens = expression.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");
Stack<Integer> stack = new Stack<>();
stack.push(Integer.parseInt(tokens[0]));
for (int i = 1; i < tokens.length; i += 2) {
String op = tokens[i];
int num = Integer.parseInt(tokens[i + 1]);
if (op.equals("+")) {
stack.push(num);
} else if (op.equals("-")) {
stack.push(-num);
}
}
int result = 0;
while (!stack.isEmpty()) {
result += stack.pop();
}
return result;
}
}
```
运行结果:
```
1+2+3+4+5+6+78-9+10=100
1+2+3-4+5+6+78+9-10=100
1+2-3+4+5+6+78+9+10=100
1+2-3-4+5+67+8+9+10=100
1+23+4+5+6+78-9-10=100
1+23-4+5+6+7+8+9-10=100
1+23-4+56+7+8+9+10=100
12+3+4+5-6-7+89+10=100
12+3+4-5+67+8+9-10=100
12+3-4+5+6+7+89-10=100
12+3-4+56+7+8+9-10=100
12-3-4+5-6+7+89+10=100
12-3-4+56+78+9-10=100
123+4-5+67-89+10=100
123+45-67+8-9=100
123-4-5-6-7+8-9+10+11+12+13+14+15+16+17=100
123-45-67+89=100
```
阅读全文