加法变乘法
我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
10就是符合要求的答案。
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
10就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
注意:需要你提交的是一个整数,不要填写任何多余的内容。
#include<iostream>
using namespace std;
int main()
{
/*1-----49*/
//a a+1 b>=a+2 b+1
for (int i = 1; i < 47; i++)//------47
{
for (int j = i + 2; j < 49; j++)//第二个乘号
{
int sum = 1225;//1-49的和为1225
sum = sum - i - (i + 1) - j - (j + 1);
sum = sum + i*(i + 1) + j*(j + 1);
if (sum == 2015)
cout << i << endl;
}
}
return 0;
}
这是第三次思考该题我得出的结果,并能解决,之前几次我总是想将数和符号分别存放在数组里,并将其按照一定的顺序排列然后在计算,那样处理会出现两个问题,一个是我们需要每次执行时对符号进行优先级判断,那么我们还得将较高的优先级的数字提出来进行计算,这样工作量很大,无法快速解决
现在的方法较为简单,可执行能力强,我们试着从反方向考虑即先计算在对乘号处理,由于乘号只有两个便于处理,嵌套for循环对两个不同的情况分别计算,由于乘号只是对连续的两个运算数所以假设第一个乘号的数为i,则i+1;第二个为j则j+1。
首先我们直接输入1-49的累加求和,然后剪掉i i+1 j j+1,然后加上i*(i+1) j*(j+1) 并且j>=i+2&&j<=48 i>=1&&i<=46
这样思考简单处理简单运行简单