解题思路:
一道数学题。、
step 1:
N可以有n个连续的整数相加,则可以写成以下序列:
a,a+1,a+2,..,a+n-1
对以上序列求和得到:(a+a+n-1)*n/2=N;
求得a=(2*N+n*(1-n))/(2*n);
step 2:
考虑n的取值范围,根据题意得:n的最大值(也就是最多有几个连续的自然数相加)是从1开始加(1+2+...+n),(1+n)*n/2=N,得到n最大为sqrt(2*n)。
源码附上:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int N;
cin>>N;
int max=sqrt(2*N),flag=0;
for(int i=max;i>=2;i--)
{
if((2*N+(1-i)*i)%(2*i)==0)
{
cout<<(2*N+(1-i)*i)/(2*i)<<endl;
flag=1;
}
}
if(flag==0)
{
cout<<"No Solution"<<endl;
}
return 0;
}