Steps 數論水題

原題

Description
One steps through integer points of the straight line. 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.
What is the minimum number of steps in order to get from x to y? The length of the first and the last step must be 1.


Input
For each test case, a line follows with two integers: 0 <= x <= y < 2^31.



Output
For each test case, print a line giving the minimum number of steps to get from x to y.



Sample Input
45 48
45 49
45 50


Sample Output
3
3
4

題意:從x走到y,要求第一步和最後一步步長爲1,相鄰兩步長度差距不超過1(例123221合法,124221不合法),求最短步數

解:由題意可知,走的步長除去中間的一個點(或兩個點)爲左右對稱,且爲等差數列,所以先求一個等差數列,與y-x比較,差值再與i比較即可

<span style="font-size:18px;">#include <stdio.h>
#include <string.h>
long long num[50005];
void inti()
{
    for(int i=0;i<50005;i++)       //等差數列
        num[i]=i*i+i;
}
int main()
{
    int x,y;
    inti();
    int i;
    while(scanf("%d%d",&x,&y)!=-1)
    {
        int temp=y-x;
        for(i=1;temp>=num[i];i++);
        int sum=2*(i-1);              //去掉中間一/兩個點
        if(temp-num[i-1]>i)
            sum+=2;
        else if(temp-num[i-1]<=i&&temp-num[i-1]>0)
            sum+=1;
        printf("%d\n",sum);
    }
    return 0;
}
</span>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章