蓝桥杯第六届省赛之加法变乘法
加法变乘法
我们都知道:1+2+3+ … + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+…+1011+12+…+2728+29+…+49 = 2015
就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
注意:需要你提交的是一个整数,不要填写任何多余的内容。
这个题的关键是要想到一个方法(等式关系)将题目给的两个等式或条件串起来,而不是盲目的没有方向的暴力枚举。
首先我们分析题目不难得出一个等式关系,设两个数字分别为n和m,
1225-n-n-1-m-m-1=2015-n*(n+1)-m*(m+1)
代码实现:
#include<iostream>
using namespace std;
int main()
{
int sum;
for(int i=1;i<=46;i++)
{
for(int j=i+2;j<=48;j++)
{
sum =1225 - (2*i+1+2*j+1);
if((sum+j*(j+1)+i*(i+1))==2015)
cout<<i<<endl;
}
}
return 0;
}
/*using namespace std;
int main()
{
int sum1,sum2;
for(int i=1;i<=46;i++)
{
for(int j=i+2;j<=48;j++)
{
sum1 = 1225-i-(i+1)-j-(j+1);
sum2 = 2015-(j*(j+1)+i*(i+1));
if(sum1 == sum2)
cout<<i<<endl;
}
}
return 0;
}*/
答案是:10和16
最后分享一下我在做算法练习和OJ刷题时常常提醒自己的一句话:做算法题的练习过程总是比结果重要,要一步一步的在自己的想法上去进行优化,去体味思考的过程,思考的方式和方法永远处于学习过程中的绝巅。