题目:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。
分析:定义small,big两个整数,当前和值小于s,则加big,大于s,则减去small,直到等于s。
#include <stdio.h>
void print_num(int small, int big)
{
int i;
for(i=small;i<=big;i++)
printf("%d\t",i);
printf("\n");
}
void find(int s)
{
if(s<3)//最小值为3
return;
int small = 1;
int big = 2;
int curr_sum = small + big;//初始化为3
while(small < (s+1)/2)//因为要至少两个连续数,所以small要小于(s+1)/2
{
if(curr_sum == s)//相等,说明找到一条序列,打印
{
print_num(small,big);
big++;//加1
curr_sum += big;//和值加上big
}
else if(curr_sum < s)//小于,加大值
{
big++;
curr_sum += big;
}
else//小于,减小值
{
curr_sum -= small;
small++;
}
}
}
int main()
{
int s;
printf("输入s的值:\n");
scanf("%d",&s);
printf("打印出的连续序列为:\n");
find(s);
return 0;
}