问题描述
编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。
/**
* 递归实现1-9之间添加"+"或"-"或""使得运算结果为100
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
new Test().calculate(new StringBuffer(), 1, 0, 0, 1);
}
private void calculate(StringBuffer sb, int i, int r, int n, int f){
sb.append(i);
n = n * 10 + i;
if(i == 9){
if(r + f * n == 100) {
System.out.print(sb);
System.out.println("=100");
}
sb.deleteCharAt(sb.length() - 1);
return;
}
// 1:跟""
calculate(sb, i + 1, r, n, f);
if(sb.charAt(sb.length() - 1) == '+' || sb.charAt(sb.length() - 1) == '-')
return;
r += f * n;
// 2:跟"+"
sb.append('+');
calculate(sb, i + 1, r, 0, 1);
// 3:跟"-"
sb.setCharAt(sb.length() - 1, '-');
calculate(sb, i + 1, r, 0, -1);
sb.deleteCharAt(sb.length() - 1);
sb.deleteCharAt(sb.length() - 1);
}
}
/**
* 运行结果:
123+45-67+8-9=100
123+4-5+67-89=100
123-45-67+89=100
123-4-5-6-7+8-9=100
12+3+4+5-6-7+89=100
12+3-4+5+67+8+9=100
12-3-4+5-6+7+89=100
1+23-4+56+7+8+9=100
1+23-4+5+6+78-9=100
1+2+34-5+67-8+9=100
1+2+3-4+5+6+78+9=100
* */