杭电OJ(HDOJ)1030题:Delta-wave

题意:

输入两个数m和n,两数的取值范围为[1,1000000000],求出n到m的最短所花步骤。

杭电OJ(HDOJ)1030题:Delta-wave_第1张图片

示例输入:

6 12

示例输出:

3

解决方案:

杭电OJ(HDOJ)1030题:Delta-wave_第2张图片

杭电OJ(HDOJ)1030题:Delta-wave_第3张图片

#include<stdio.h>
#include<math.h>
int main()
{
    int a,b;
    int aX,aY,bX,bY,aLayer,bLayer,step;
    while(scanf("%d%d",&a,&b)!=EOF)
    {
        aLayer=ceil(sqrt((double)a));//求出数a所在层
        bLayer=ceil(sqrt((double)b));//求出数b所在层
        if(aLayer==bLayer)  printf("%d\n",abs(a-b));
        else
            {
                aX=(aLayer*aLayer-a)/2;//计算a的X坐标
                bX=(bLayer*bLayer-b)/2;//计算b的X坐标
                aY=(a-(aLayer*aLayer-2*aLayer+2))/2;//计算a的Y坐标
                bY=(b-(bLayer*bLayer-2*bLayer+2))/2;//计算b的Y坐标
                step=abs(aX-bX)+abs(aY-bY)+abs(aLayer-bLayer);
                printf("%d\n",step);//求出最终步骤
            }
    }
}


你可能感兴趣的:(算法,数学,ACM,杭电,OJ)