输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~54~6和7~8。
Posted dongma
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~54~6和7~8。相关的知识,希望对你有一定的参考价值。
思路:
1,利用左右指针的思想
2,因为至少要有两个数,所以最大值为:(1+sum) / 2;
3,指定起始序列为1,2
举个例子,sum=9的情况
实现
void findContinuousSequence(int sum){ if(sum < 3){ return; } int small = 1; int big = 2; int mid = (1 + sum) >> 1; while (small < mid && big <= mid){ int curSum = 0; for (int i = small; i <= big; ++i) { curSum += i; } if(curSum == sum){ for (int i = small; i <= big; ++i) { if(i == big){ cout<<i<<"="; } else{ cout<<i<<"+"; } } cout<<sum<<endl; big++; } else if(curSum < sum){// 序列小于指定值,big++ big++; } else{ small++; } } }
以上是关于输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~54~6和7~8。的主要内容,如果未能解决你的问题,请参考以下文章