【数据结构】加号变乘号

题目

我们都知道:1+2+3+..+49=1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+...+10*11+12+...+27*28+29+...+49=2015就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交。
(对于示例,就是提交10)。

要求

输出该整数,不要输出任何多余的内容或者说明性的文字。

实现

方法一:枚举

思路:

①:1+2+3+...10+(10+1)+...+27+(27+1)+...+49=1225

②:1+2+3+..10*11+...+27*28+...+49=2015

将上式式子用参数表示:

③:1+2+3+...i+(i+1)+...+j+(j+1)+...+49=1225

④:1+2+3+..i*(i+1)+...+j*(j+1)+...+49=2015

令③④式等于0,则得:

i + ( i + 1 ) + j + ( j + 1 ) - 1225 = 0

i * ( i + 1 ) + j * ( j + 1 ) - 2015 = 0

解以上③④式即可得出结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package lab;

import com.sun.org.apache.xpath.internal.functions.FuncSum;

public class 加号变乘号04 {

static int sum=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
FuncSum();
}

private static void FuncSum() {
//遍历解方程
for (int i = 1; i <= 49; i++) {
// 题目所说,两个不相邻的加号变成乘号,所以j要+2
for (int j = i+2; j <= 49; j++) {

int x = -1225 + i+i+1+j+j+1;
int y = -2015 + j*(j+1)+i*(i+1);

//若方程有解,则输出结果
if (x==y) {
System.out.println(i+" "+j);
}
}
}
}
}

知识点

主要运用了枚举解方程。

本文章来源于我的博客:https://blog.hikki.site