和为n连续正数序列 【微软面试100题 第五十一题】
2024-08-30 07:37:02
题目要求:
输入一个正数n,输出所有和为n连续正数序列(至少两个)。
例如输入15,由于1+2+3+4+5 = 4+5+6 = 7+8 = 15.所以输出3个连续序列1~5,4~6,7~8.
参考资料:剑指offer第41题。
题目分析:
由题意可知:从1~n中找连续的整数序列。
可以用两个变量small和big表示一个区间small~big,再用一个变量sum表示这个区间的数的和如果sum>n,则small向后移,如果sum<n则big向后移,如果sum=n则输出该区间small~big.
代码实现:
#include <iostream> using namespace std; void FindContinuousSequence(int n); int main(void)
{
int n; cout << "请输入n:"; cin >> n;
FindContinuousSequence(n); return ;
}
void Print(int small,int big)
{
cout << "连续序列有:";
for(int i = small;i<=big;i++)
cout << i << " ";
cout << endl;
}
void FindContinuousSequence(int n)
{
//因为至少两个正数,1+2=3,因此如果n<3则不存在连续序列
if(n<)
return;
int small = ;
int big = ;
//至少两个数,则最小的数肯定小于mid,作为退出while条件
int mid = (+n)/;
int curSum = small+big;
while(small<mid)
{
if(curSum==n)
Print(small,big);
while(curSum>n && small<mid)
{
curSum -= small;
small++;
if(curSum==n)
Print(small,big);
}
big++;
curSum += big;
}
}
最新文章
- HTML 5 的自定义 data-* 属性和jquery的data()方法的使用
- sql报句柄无效。 (异常来自 HRESULT:0x80070006 (E_HANDLE))
- Oracle数据库建表并用SQL编程分等级
- App压力测试整理
- Spring MVC与表单日期提交的问题
- PHP性能优化学习笔记--语言级性能优化--来自慕课网Pangee http://www.imooc.com/learn/205
- NFC应用(二)读写器模式
- UVA - 12333 字典树+大数
- 强化学习(十七) 基于模型的强化学习与Dyna算法框架
- June. 25th 2018, Week 26th. Monday
- ftp定时任务-日志备份
- python 字典 拼接SQL语句
- Python文件打包成exe
- 36、NSTimer使用详解-开启、关闭、移除
- gnome美化
- TeeChart设置图表的标题
- angular5 路由传参的几种方式
- XPath 常用语法札记
- [并查集] 1118. Birds in Forest (25)
- html-blogsdemo