蓝桥杯 — 加法变乘法(把其中两个不相邻的加号变成乘号)

题目要求如下:


加法变乘法

我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015

比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。

请你寻找另外一个可能的答案,
并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

注意:需要你提交的是一个整数,不要填写任何多余的内容。


思路:

1.  说思路其实也没什么思路,按照正常的解法一步一步的写出程序来就OK了。

2.  将1+2+3+ ... + 49其中的两个“+”变成“*”,用双重循环来遍历所有可能出现的结果。

3.  外层循环的变量i代表前一个“*”,内层循环中的j代表后一个“*”,依次遍历。

4.  用变量tmp来保存将程序中的前一个“+”改变成“*”过后的结果。代码为tmp = res = sum-(i+(i-1))+i*(i-1) ,读者需要仔细理解这句代码。

5.  用变量res来保存将程序中的后一个“+”改变成“*”过后的结果。代码为res = tmp-(j+(j-1))+j*(j-1) 。

6.  然后变量res判断的值是否为2015。如果是,则输出i和对于j的值。(题目中只要求求出前一个“*”所在的位置,即i的值)。


源代码如下:

#include <stdio.h>  
int main()  
{  
    int sum = 1225;
	int tmp=0;  //临时变量,在程序中保存中间结果 
	int res=0;  //用来保存将“+”改变成“*”号后的结果 
    for(int i=2; i<=47; ++i)
	 {  
        tmp = res = sum-(i+(i-1))+i*(i-1);  
        
        for(int j=i+2; j<=49; ++j) 
		{  
            res = tmp-(j+(j-1))+j*(j-1);  
            if(res == 2015)
			{  
                printf("(i= %d ,j= %d)\n", i-1,j-1);  
            }    
        }  
    }  
}

运行结果如下:



注:本程序在devc++中通过编译运行。

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值