51Nod1138 连续整数的和(公式换算)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/qq_42391248/article/details/84707280