第六届蓝桥杯省赛B组——加法变乘法

1.问题描述:

加法变乘法

我们都知道:1+2+3+ … + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015

比如:
1+2+3+…+1011+12+…+2728+29+…+49 = 2015
就是符合要求的答案。

请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

注意:需要你提交的是一个整数,不要填写任何多余的内容。

2.分析:

这道题目题目给出了我们一组解即将10,11中间的+号改变为*,27与28之间的+号改为*。
其实我们还是可以用暴力大法,但是需要找到技巧,比方说我们该怎么枚举呢。
首先清楚地是将这一串数字中的两个+号改变为号使得和为2015.
那么我们就枚举两个
号的位置,那枚举范围呢,第一个乘号的位置最多就到46后,而第二个乘号则应该最多放在48与49之间。
第六届蓝桥杯省赛B组——加法变乘法
然后用两重循环枚举两个乘号的位置即可,
我们可以发现如果1 +…+49的和为1225,然后改变两个加号的位置让和改变为2015.
那么我们可以将两次号的的数比如10 * 11 + 27 * 28
然后我们将它们减掉原来相加的时候的差值不就是2015 - 1225
即10 * 11 + 27
28 - (10 + 11) - (27 + 28) = 2015 - 1225
这就是循环出口。

3.代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
	for (int i = 1; i <= 46; i++) {
		for (int j = i + 2; j <= 48; j++) {
			if ((i + 1) * i - (i + 1 + i) + (j + 1) * j - (j + 1 + j) == 2015 - 1225) {
				printf("%d %d\n", i, j);
			}
		}
	}
	return 0;
}

欢迎关注
www.lyxueit.com