概述
有了面试题41_1的经验,我们也可以考虑用两个数 small 和 big分别表示序列的最小值和最大值,首先将small=1,big=2;如果small~big的和大于s,small++;如果small~big的和小于S,big++;直到small=(s+1)/2;
void printfContinueNumbers(int small,int big)
{
int i;
for(i=small;i<=big;i++)
printf("%d ",i);
printf("n");
}
void FindContinueNumbers(int sum)
{
int small=1,big=2,end=(1+sum)/2,tempSum=3;
if(sum<3)
return ;
while(small<end)
{
if(tempSum==sum){
printfContinueNumbers(small,big);
tempSum-=small;
small++;
}
else if(tempSum>sum){
tempSum-=small;
small++;
}else{
big++;
tempSum+=big;
}
}
}
在上面的代码中,求连续序列的和应用了一个小技巧。我们考虑到每次操作之后的序列和操作之前的序列大部分都是相同的,只是增加或者减少一个数字,因此在前一个的和基础上求操作之后的序列的和,我们可以减少很多不必要的运算。
最后
以上就是繁荣往事为你收集整理的面试题41_2 输入一个正数s,打印所有和为s的连续正数序列(至少两个数)的全部内容,希望文章能够帮你解决面试题41_2 输入一个正数s,打印所有和为s的连续正数序列(至少两个数)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复