输入一个正数 n,输出所有和为n 连续正数序列。

来源:互联网 发布:阿里云logo 矢量 编辑:程序博客网 时间:2024/04/19 15:56

题目:输入一个正数 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 }                                                                                                                                                                                                                                                                     
                                                                                                                        
原创粉丝点击