AcWing 1219. 移动距离
原题链接
简单
作者:
RememberMe
,
2025-03-13 23:54:10
·福建
,
所有人可见
,
阅读 2
//在考试中只考两种距离;
//1. 曼哈顿距离 |x1-x2| + |y1-y2| 2.欧几里德距离 sqr((x1-x2)^2+(y1-y2)^2)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int w,m,n; //这里w是宽度 求的是m,n之间最短移动距离。
scanf("%d %d %d",&w,&m,&n);
m --, n --;
int x1,y1,x2,y2;
x1 = m / w , x2 = n / w; //整除最大的宽就可以得到该数的行
y1 = m % w , y2 = n % w; //正向的输出的
//判断特殊情况,当行是奇数的时候,需要从右往左看
if (x1 % 2) y1 = w - 1 - y1; //最大的宽-1 再减去y1本来的位置 比如:1 2 3 4 5 找 5 4 3 2 1 第一个位置就是 5 - 1 - 0 = 4
if (x2 % 2) y2 = w - 1 - y2;
printf("%d" , abs(x1 - x2) + abs(y1 - y2));
return 0;
}
// 输入案例 w=6 m=8 n=2
//x1 = 7 / 6 , x2 = 1 / 6 y1 = 7 % 6 y2 = 1 % 6
//x1 = 1 , x2 = 0 , y1 = 1 , y2 = 1 ;
//x1=1 % 2 == 1 所以 y1 = 6 - 1 - 1 = 4;
//x1 = 1 , x2 = 0 , y1 = 4 , y2 = 3 ;
//1 - 0 = 1 ; 4 - 1 = 4