把整数分解为连续整数之和(难度:normal 注意优化)


输入:35
输出: 2,3,4,5,6,7,8
       5,6,7,8,9
       17,18

以上都是连续的整数,也许大家第一想到的是穷举法,呵呵 ,大家可以先试试
 

下面给出自己的算法

 

Code:
  1. #include <stdio.h>   
  2. int main(void)   
  3. {   
  4.     int n, nSum=1;// nSum 保存总和   
  5.     scanf("%d", &n);// 输入要分解的n   
  6.     for(int n1=1, n2=n1; n1<=n/2; )// n1为最开头的数,n2是最末尾   
  7.     {   
  8.         if(nSum<n)      //总和偏小   
  9.         {   
  10.             n2++;       //末尾加数   
  11.             nSum+=n2;   
  12.         }   
  13.         else if(nSum>n) //总和偏大   
  14.         {   
  15.             nSum -= n1; //开头删数   
  16.             n1++;   
  17.         }   
  18.         else //if(nSum==n) //相等就输出结果   
  19.         {   
  20.             for(int t=n1; t<=n2; t++)   
  21.             {   
  22.                 printf("%d,", t);   
  23.             }   
  24.             printf("/n");   
  25.             n2++;       //末尾加数,如果不加就会死循环   
  26.             nSum+=n2;   //这步要小心   
  27.         }   
  28.     }   
  29.     return 0;   
  30. }   

 


原文链接: http://blog.csdn.net/crazyjixiang/article/details/6464438

你可能感兴趣的:(把整数分解为连续整数之和(难度:normal 注意优化))