您的位置:首页 > 其它

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

2014-11-24 12:28 387 查看

题意:

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



示例输入:

6 12

示例输出:

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);//求出最终步骤
            }
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: