称号:输入一个整数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;
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

最新文章

  1. 收藏的Android学习资源
  2. poj 并查集
  3. cocos2d3.x在android下屏蔽多点触控
  4. C#异常Retry通用类
  5. 1415-2 计科&amp;计高 软件工程博客&amp;Github地址汇总-修正版
  6. 抢小米软件html版(简单有效)
  7. jquery ajax给外部变量赋值 async: false
  8. 第一次sprint团队贡献分改
  9. How To Fix – Mcrypt PHP extension required in Laravel on Mac OS X (No MAMP)
  10. Gradle DSL method found: ‘android()’错误
  11. JAVA复习2 JAVA开发环境配置
  12. struts2,hibernate,spring整合笔记(4)--struts与spring的整合
  13. 使用Office2007向cnblogs.com发布文章
  14. MyEclipse 安装activiti designer
  15. javaCore分析示例(转)
  16. HttpServletRequest.getServletContext()一直提示找不到,而引出的问题
  17. Android的ViewAnimator及其子类ViewSwitcher-android学习之旅(三十三)
  18. git无法添加文件夹
  19. 共创力董事长杨学明先生受邀参加CED智慧大会!
  20. 在Qt Quick中一个简单Hello World加载过程

热门文章

  1. Android 吸入动画效果详解
  2. Program1-1
  3. Enum的简单了解
  4. poj 1220 NUMBER BASE CONVERSION(短除法进制转换)
  5. java多线程:ReentrantReadWriteLock读写锁使用
  6. Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)(转)
  7. hdu2151(递推dp)
  8. hyper-v 报错 0x80070569
  9. JAVA 根据经纬度算出附近的正方形的四个角的经纬度
  10. 《UNIX编程环境》的源代码的第二个版本Ubuntu下编