概述
1. 描述
输入一个正整数n,输出所有和为n的连续正整数序列。
例如输入15,输出4个序列:1 2 3 4 5,4 5 6, 7 8, 15
据说这是一道网易的面试题。
2. 思路
用start和end分别表示序列的起始和结束,sum为从start到end序列的和。end的值不大于(n+1)/2。开始时令sum = start = end = 0,判断sum的值是否等于n:
(1) 如果等于n,则打印从start到end之间的序列,并令sum += ++end;
(2) 如果sum 小于n,则令sum += ++end;
(3) 此时sum大于n,令sum -= start++;
代码如下:
void continuousSeqSum(int n)
{
if (n <= 0)
return ;
int sum, start, end, i;
sum = start = end = 1;
while (end <= (n + 1) >> 1)
{
if (sum == n)
{
for (i = start; i <= end; i++) //打印结果
printf("%d ", i);
printf("n");
sum += ++end;
} else if (sum < n)
{
sum += ++end;
} else
{
sum -= start++;
}
} //while
if (n > 1)
printf("%dn", n);
}
测试如下:
#include <stdio.h>
void continuousSeqSum(int n);
int main(void)
{
int n;
printf("input n: ");
scanf("%d", &n);
continuousSeqSum(n);
return 0;
}
输出:
最后
以上就是粗心镜子为你收集整理的和为 n 的连续正整数序列的全部内容,希望文章能够帮你解决和为 n 的连续正整数序列所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复