题目:
给你一个整数N和长度L, 现在要求你找X个连续的非负整数,使得它们的和是N, 同时要满足 X >= L, 你的任务是使得X最小,输出这连续的X个整数。如果找不到这样的连续整数或者能找到但X > 100, 那么你输出-1。 也就是能找到满足题意的连续整数,且X < =100时,才输出这连续的X个非负整数。
超时:
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=2333;
long long n,l,x,c,shu=0;
int main()
{
cin>>n>>l;
for(int i=1;;i++)
{
if(((i*2+l)*(l+1))/2>n)
break;
for(int j=l;j<=100;j++)
{
if(((i*2+100)*(101))/2<n)
break;
if(((i*2+j)*(j+1))/2==n)
{
shu++;
x=i;
c=j+1;
break;
}
if(((i*2+j)*(j+1))/2>n)
{
break;
}
}
}
if((shu==0))
cout<<"-1"<<endl;
else
{
for(int i=x;i<=c+x-1;i++)
cout<<i<<endl;
}
return 0;
}
ACCEPTED:
#include<iostream>
#include<algorithm>
using namespace std;
int n,l,t=0,sum;
void work()
{
for (int i=l;i<=100;i++)
{
sum=n;
sum*=2;
if ((sum%i==0)&&((sum/i-i+1)%2==0))
{
sum=(sum/i-i+1)/2;
t=i;
break;
}
}
}
int main()
{
cin>>n>>l;
work();
if (t==0) cout<<"-1"<<endl;
else for (int i=sum;i<=sum+t-1;i++)
cout<<i<<endl;
return 0;
}