计算一个数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);
    }

}