蓝桥杯填空题 —— 加法变乘法
2016-07-06 13:55
239 查看
加法变乘法
我们都知道:1+2+3+ … + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如: 1+2+3+…+10*11+12+…+27*28+29+…+49 = 2015 就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
思路:
1+2+3+…+49 = (1+49)*49/2 = 1225
假设在num = i 和 num = j 时是进行乘法运算的,则有1+2+3+…+i * (i + 1)+…+j * (j + 1)+… +49 = 2015
将上式进行拆分:1+2+3+…+i + (i + 1)+…+j + (j + 1)+… +49 = 1225,本来应该加上i * (i + 1),现在只加了 i + (i + 1),还剩下
i * (i + 1) - i + (i + 1) = i * (i + 1) - (2*i + 1) 没有加上去,同理,还有剩下没加的是 j * (j + 1) - (2*j + 1)
因此,1+2+3+…+i + (i + 1)+…+j + (j + 1)+… +49 + i * (i + 1) - (2*i + 1) + j * (j + 1) - (2*j + 1) = 2015
即 1225 + i * (i + 1) - (2*i + 1) + j * (j + 1) - (2*j + 1) = 2015
我们都知道:1+2+3+ … + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如: 1+2+3+…+10*11+12+…+27*28+29+…+49 = 2015 就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
思路:
1+2+3+…+49 = (1+49)*49/2 = 1225
假设在num = i 和 num = j 时是进行乘法运算的,则有1+2+3+…+i * (i + 1)+…+j * (j + 1)+… +49 = 2015
将上式进行拆分:1+2+3+…+i + (i + 1)+…+j + (j + 1)+… +49 = 1225,本来应该加上i * (i + 1),现在只加了 i + (i + 1),还剩下
i * (i + 1) - i + (i + 1) = i * (i + 1) - (2*i + 1) 没有加上去,同理,还有剩下没加的是 j * (j + 1) - (2*j + 1)
因此,1+2+3+…+i + (i + 1)+…+j + (j + 1)+… +49 + i * (i + 1) - (2*i + 1) + j * (j + 1) - (2*j + 1) = 2015
即 1225 + i * (i + 1) - (2*i + 1) + j * (j + 1) - (2*j + 1) = 2015
int main() { //1+...+49=(50/2)*49=1225 int i,j; for(i=1;i<=48;i++) { for(j=i+1;j<=48;j++) { if(1225-(2*i+1)-(2*j+1)+i*(i+1)+j*(j+1)==2015) printf("%d %d\n",i,j); } } return 0; }
相关文章推荐
- Linux C函数参考手册(PDF版)
- C# partial关键字说明
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- C#用链式方法表达循环嵌套
- C#中的委托数据类型简介
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C和指针小结(推荐)
- C++中explict关键字用法
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- 学习C和C++的9点经验总结
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]