版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42391248/article/details/84707280
设长度为t,初始位置为a,有(2a-1+t)*t/2=n,a=(2n+t-t²)/2t。
这一题难在如何缩短遍历的长度。1到sqrt(2*n)。这一点我还没理解
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,i;
cin>>n;
int flag=1;
for(i=(int)sqrt(2*n);i>1;i--)
{
int a=2*n+i-i*i;
int b=2*i;
if(a%b==0&&a/b>0)
{
flag=0;
cout<<a/b<<endl;
}
}
if(flag) cout<<"No Solution"<<endl;
return 0;
}