【6】和作为连续序列s
2024-08-25 15:52:48
称号:输入一个整数s,并打印出所有s整数的连续序列(含有至少2的数量)。
如输入9,输出2、3、4和4、5两个序列
方案一:因为序列至少要2个数,则两个数上限值为(1+s)/2,我们能够枚举该序列的起点和终点求全部满足的序列。时间复杂度为O(n^2),效率比較低
方案二:我们设置两个指针start和end分别表示当前序列的起点和终点,并记序列和为sum。
当sum = s的时候输出这个序列,而且end往后移动一位;假设sum > s,则start往后移动一位。假设sum < s,则end要往后移动一位。
直到start == (1+s)/2结束循环,时间复杂度O(n)。效率非常高
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; //打印序列
void PrintNum(int start, int end){
for(int i = start; i <= end; i++){
printf("%d ", i);
}
printf("\n");
} //找到两个数和为s
void FindSequenceSum(int s){
if(s < 3){ //和小于3是不合法的数据
return;
}
int start = 1;
int end = 2;
int sum = 3;
int mid = (1+s)>>1;
//循环找到全部的序列
while(start < mid){ //序列的起点要小于(1+s)的一半
if(sum == s){ //和为sum的序列直接打印
PrintNum(start, end);
end++;
sum += end;
}
else if(sum > s){ //和大于s的序列则起始点往后移动一个
sum -= start;
start++;
}
else{ //和小于s的序列则终点往后移动一位
end++;
sum += end;
}
}
} int main(){
FindSequenceSum(9);
getchar();
return 0;
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
最新文章
- 收藏的Android学习资源
- poj 并查集
- cocos2d3.x在android下屏蔽多点触控
- C#异常Retry通用类
- 1415-2 计科&;计高 软件工程博客&;Github地址汇总-修正版
- 抢小米软件html版(简单有效)
- jquery ajax给外部变量赋值 async: false
- 第一次sprint团队贡献分改
- How To Fix – Mcrypt PHP extension required in Laravel on Mac OS X (No MAMP)
- Gradle DSL method found: ‘android()’错误
- JAVA复习2 JAVA开发环境配置
- struts2,hibernate,spring整合笔记(4)--struts与spring的整合
- 使用Office2007向cnblogs.com发布文章
- MyEclipse 安装activiti designer
- javaCore分析示例(转)
- HttpServletRequest.getServletContext()一直提示找不到,而引出的问题
- Android的ViewAnimator及其子类ViewSwitcher-android学习之旅(三十三)
- git无法添加文件夹
- 共创力董事长杨学明先生受邀参加CED智慧大会!
- 在Qt Quick中一个简单Hello World加载过程