这个题描述虽然短,但不容易读明白,尤其是The length of a step must be nonnegative and can be by one bigger than, equal to, or by one smaller than the length of the previous step.这句意思是:步长一定是非负的,而且比前一步长要多一,相等或少一。
我做的时候考虑到n*(n+1)和(n+1)*(n+1)这两个值,发现n从0,1,2,3,4, 5…… 开始时,两式取值是:0 1 2 4 6 9 12……当y-x的值在(n*(n+1),(n+1)*(n+1)]之间时,相应的“n”就是步长,但我不知如何证明
代码如下:
#include<iostream>
using namespace std;
long long Digit[100001];//储存n*(n+1)和(n+1)*(n+1)的值
long long length;//步长
void Calculate()
{
length = 0;
for(long long i = 0; i < 46500; i++){
Digit[length++] = i * (i + 1);
Digit[length++] = (i + 1) * (i + 1);
}
}
int Search(int num)//查找
{
for(int i = 0; i < length; i++){
if(num <= Digit[i]){
return i;
}
}
}
int main()
{
int n, begin, end;
Calculate();
cin>>n;
while(n--){
cin>>begin>>end;
cout<<Search(end - begin)<<endl;
}
return 0;
}