第六届蓝桥杯省赛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之间。
然后用两重循环枚举两个乘号的位置即可,
我们可以发现如果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