您的位置:首页 > 其它

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

2016-02-29 19:50 225 查看
题目要求如下:

加法变乘法

我们都知道: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++中通过编译运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: