计算一个数N由连续数相加的方案数,通过递归加上适当的剪枝可以实
勉强实现了,差点超时了。。。

#include  < iostream >
#include 
< string >
#include 
< vector >
#include 
< cmath >
using   namespace  std;

int  count;
void  getCount( long   int  current, long   int  start, bool  fst)   //fst代表是否为第一轮查找,若不是,之后只要有一个数不连续则返回

{
    
for (long int i=start;i>0;i--)
    
{
        
if(current>=i)
        
{
            current
-=i;
           
if (current==0)
           
{
               count
++;
               current
+=i;
               
continue;
           }

           
else
           
{
               
if(current>=i-1)
               
{
                   getCount(current,i
-1,false);    
               }

               
if(fst)
               
{current+=i;continue;}
               
else
                   
return;
           }

           current
+=i;
        }

    }

}

int  main()
{
    
long int n;
    
while (scanf("%ld",&n)!=EOF)
    
{
          count
=0;
          getCount(n,n,
true);
          printf(
"%ld\n",count);
    }

}