题目:输入一个正数 n,输出所有和为 n 连续正数序列
分析:如 15,1+2+3+4+5=4+5+6=7+8=15,可以看出有3组序列。
此处可以看出当数为奇数时,两连续数相加可以得到,这种组合为数字最大的组合。故我们可以从1到正数的一半(n/2+1)遍历所有和的组合。
#include<stdio.h>
void seq(unsigned int n)
{
int small=1;
int big=2;
int i=1;
int sum=0;
printf("和为%d的所有序列组合如下:\n",n);
while(small<n/2+1)
{
sum=0;
for(i=small;i<=big;i++)
{
sum+=i;
}
if(sum==n)
{
for(i=small;i<=big;i++)
{
printf("%d ",i);
}
printf("\n");
small++;
big=small+1;
}
else if(sum<n)
{
big++;
}
else
{
small++;
}
}
}
int main()
{
seq(15);
seq(70);
return 0;
}
欢迎留言给出更优的解法!
Juyin@2018/5/12