我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)
答案:16
public class Main {
static int[] book = new int[49];
static int[] res = new int[2];
public static void main(String[] args) {
dfs(0);
}
static void dfs(int idx) {
if (idx == 2) {
if (check())
System.out.println(res[0] + " " + res[1]);
return;
}
for (int i = 1; i <= 48; i++) { // * 放在i这个数字的右边
if (book[i] == 0) {
if (idx == 1 && Math.abs(i - res[0]) != 1) {
book[i] = 1;
res[idx] = i;
dfs(idx + 1);
book[i] = 0;
} else {
book[i] = 1;
res[idx] = i;
dfs(idx + 1);
book[i] = 0;
}
}
}
}
static boolean check() {
int ans = 0;
for (int i = 1; i <= 49; i++)
if (res[0] == i || res[1] == i)
ans += (i * (i + 1));
for (int i = 1; i <= 49; i++) {
if (res[0] == i || res[1] == i || res[0] + 1 == i || res[1] + 1 == i)
continue;
ans += i;
}
return ans == 2015;
}
}
解法二:
public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 46; i++)
for (int j = i + 2; j <= 48; j++)
if (i * (i + 1) - ((i << 1) | 1) + j * (j + 1) - ((j << 1) | 1) == 2015-1225)
System.out.println(i + " " + j);
}
}