加法变乘法


加法变乘法
我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
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
这样思考简单处理简单运行简单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值