我们都知道: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);
- }
- }