问题描述:
怎样才能得100分?
我们的考试一般总分都是100分,当我们做的全对时,我们试卷就可以是100分。
下面我们玩一个游戏,来凑出100分。我们给大家9个数字,大家使用“+”和“-”把这九个数字串成一个等式,等式的结果就是100.
给大家的等式如下:
1 2 3 4 5 6 7 8 9 = 100
在1~9的数字中加上“+”或“-”(也可以不加任何符号,但是不能是其他符号)
加上+-符号后等式可以如下所示:
1+2+3-4+5+6+78+9=100
这样的等式还有很多,这个游戏你会玩吗。赶快编写程序,找出所有符合条件的等式吧。
输入:无
输出样式:
1+2+34-5+67-8+9=100
思路:从头到尾把1-9之间的9个空位分别填入"+","-","",当9个空位全部填完判断此字符串的结果是否为100。
代码如下:
public class Test5_怎么才能考100分 {
static String s = “123456789”;
static String[] ss = { “+”, “-”, “” };
public static void main(String[] args) {
f(1, 0);
}
private static void f(int m, int n) {
if (n == 8) {
if (check(s) == 100) {
System.out.println(s+"=100");
}
return;
}
for (int i = 0; i < 3; i++) {
if (i != 2) {
String old = s;
s = s.substring(0, m) + ss[i] + s.substring(m);
m += 2;
n++;
f(m, n);
m -= 2;
n--;
s = old;
} else {
m++;
n++;
f(m, n);
m--;
n--;
}
}
}
private static int check(String str) {
String[] nums = str.split("\\+");
int sum = 0;
for (int i = 0; i < nums.length; i++) {
String[] nums2 = nums[i].split("\\-");
if (nums2.length > 1) {
for (int j = 0; j < nums2.length; j++) {
if (j == 0) {
sum += Integer.parseInt(nums2[j]);
} else {
sum -= Integer.parseInt(nums2[j]);
}
}
} else {
sum += Integer.parseInt(nums[i]);
}
}
return sum;
}
}