题目:输入一个正数 n,输出所有和为n 连续正数序列。
例如输入 15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5、4-6 和7-8。
可以发现任意自然数序列其实是公差为1的等差数列,那么数列前N项和公式有a1*n +n*(n-1)/2 = sn,而这里sn = 输入的正整数input。通过分析a1只需在集合[1,input/2]中,把上式等效变形为n*n+(2a1-1)n-2input = 0,n的取值为2a分之负b加减根号下b方减4ac,哈,如果n为一个正整数,那么符合条件输出
1 #include <stdio.h>
2 #include <math.h>
3 int main()
4 {
5 int n;
6 int i=0;
7 int j=0;
8 int num=0;
9 double tmp=0;
10 scanf("%d",&n);
11 for(i=1;i<=n/2;i++)
12 {
13 num=(2*i-1)*(2*i-1)+8*n;
14 tmp=sqrt(1.0*num);
15 if(tmp!=(int)tmp)
16 continue;
17
18 num=(1-2*i+(int)tmp);
19 if(num%2==0&&num>0)
20 {
21 for(j=0;j<num/2;j++)
22 printf("%d ",i+j);
23 printf("\n");
24
25
26 }
27
28 }
29 return 0;
30 }