博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【6】连续序列和为s
阅读量:6001 次
发布时间:2019-06-20

本文共 987 字,大约阅读时间需要 3 分钟。

题目:输入一个整数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
#include
#include
#include
using namespace std;//打印序列void PrintNum(int start, int end){ for(int i = start; i <= end; i++){ printf("%d ", i); } printf("\n");}//找到两个数和为svoid 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;}

转载地址:http://epbmx.baihongyu.com/

你可能感兴趣的文章
Facebook和用户界面会如何扭曲你说的话
查看>>
安卓混合开发之Cordova,NativeWebView两种实现
查看>>
桶排序
查看>>
石化数字化交付
查看>>
如何用windows Live writer 撰写blog
查看>>
RHEL6入门系列之十九,硬盘分区与格式化
查看>>
Linux下升级 OpenSSH
查看>>
标准功能模块组件 -- 名片管理组件,C\S 版本的标准用例程序,可以参考权限实现方法...
查看>>
zygote进程图
查看>>
ldap快速配置
查看>>
docker之docker-machine用法
查看>>
IIS 7启用static JSON文件能POST方法
查看>>
P5205 【模板】多项式开根
查看>>
微博mini for Windows Phone 8 开发那些事
查看>>
redis文章索引
查看>>
OpenSSH利用处理畸形长度密码造成的时间差,枚举系统用户(CVE-2016-6210)
查看>>
Javascript回调函数
查看>>
可能是最简单的面向对象入门教程(二)为什么要有类型
查看>>
配置Openfiler做ISCS实验
查看>>
Maven启用代理访问
查看>>