博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【100题】第五十一题 和为n连续正数序列
阅读量:6294 次
发布时间:2019-06-22

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

一,题目

       输入一个正数n,输出所有和为n连续正数序列。

       例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-54-67-8

二,思路

       解法一:连续正序列,不包含n本身。所以子序列中最大元素为 n/2+1

                     求出到前 i个元素和保存到b数组中,然后遍历数组b ,i>j 时,求b[i] –b[j] ==n。如果等于则输出 j+1 到 I 的序列。

                     时间复杂度:O(n^2)    

#include 
using namespace std;void print(int a[],int j,int i){ for(int k=j;k<=i;++k) cout<
<<" "; cout<
=0;--i) { for(int j=i-1;j>=0;--j) { if((b[i]-b[j])==n) { print(a,j+1,i); } } } }

       解法二:

                    我们可用两个数smallbig分别表示序列的最小值和最大值。

                    首先把small初始化为1big初始化为2

                          如果从smallbig的序列的和大于n的话,我们向右移动small,相当于从序列中去掉较小的数字。
                          如果从smallbig的序列的和小于n的话,我们向右移动big,相当于向序列中添加big的下一个数字。
                     一直到small等于(1+n)/2,因为序列至少要有两个数字。

#include 
using namespace std;void PrintContinuousSequence(int small, int big){ for(int i = small; i <= big; ++ i) printf("%d ", i); printf("\n");}void FindContinuousSequence(int n){ if(n < 3) return; int small = 1; int big = 2; //至少两个元素 int middle = (1 + n) / 2; int sum = small + big; while(small < middle) { if(sum == n) PrintContinuousSequence(small, big); // if the current sum is greater than n, // move small forward while(sum > n)//元素偏大 { sum -= small; small ++; if(sum == n) PrintContinuousSequence(small, big); } // move big forward big ++; sum += big; }}int main(){ FindContinuousSequence(15);}

转载于:https://www.cnblogs.com/secbook/archive/2012/08/21/2654957.html

你可能感兴趣的文章
同一台电脑上Windows 7和Ubuntu 14.04的CPU温度和GPU温度对比
查看>>
js数组的操作
查看>>
springmvc Could not write content: No serializer
查看>>
Python系语言发展综述
查看>>
新手 开博
查看>>
借助开源工具高效完成Java应用的运行分析
查看>>
163 yum
查看>>
第三章:Shiro的配置——深入浅出学Shiro细粒度权限开发框架
查看>>
80后创业的经验谈(转,朴实但实用!推荐)
查看>>
让Windows图片查看器和windows资源管理器显示WebP格式
查看>>
我的友情链接
查看>>
vim使用点滴
查看>>
embedded linux学习中几个需要明确的概念
查看>>
mysql常用语法
查看>>
Morris ajax
查看>>
【Docker学习笔记(四)】通过Nginx镜像快速搭建静态网站
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>