首页 > 学院 > 开发设计 > 正文

加法变乘法

2019-11-06 06:19:44
字体:
来源:转载
供稿:网友
加法变乘法我们都知道:1+2+3+ ... + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015比如:1+2+3+...+10*11+12+...+27*28+29+...+49 = 201510就是符合要求的答案。请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交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这样思考简单处理简单运行简单
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表