移动距离(蓝桥杯模拟题)

1219. 移动距离

 

X星球居民小区的楼房全是一样的,并且按矩阵样式排列。

其楼房的编号为 1,2,31,2,3…

当排满一行时,从下一行相邻的楼往反方向排号。

比如:当小区排号宽度为 66 时,开始情形如下:

1  2  3  4  5  6
12 11 10 9  8  7
13 14 15 .....

我们的问题是:已知了两个楼号 mm 和 nn,需要求出它们之间的最短移动距离(不能斜线方向移动)。

输入格式

输入共一行,包含三个整数 w,m,nw,m,n,ww 为排号宽度,m,nm,n 为待计算的楼号。

输出格式

输出一个整数,表示 m,nm,n 两楼间最短移动距离。

数据范围

1w,m,n100001≤w,m,n≤10000,

代码:

复制代码
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int w,m,n;
    cin>>w>>m>>n;
    m--,n--;//序号减一,便于利用公式求行号和列号
    int x1=m/w,y1=m%w;//横纵坐标分别表示行号和列号
    int x2=n/w,y2=n%w;
    if(x1%2) y1=w-1-y1;//特判,因为是蛇形编号,所以奇数行需要改变坐标
    if(x2%2) y2=w-1-y2;
    cout<<abs(x1-x2)+abs(y1-y2);//求曼哈顿距离
    return 0;
}
复制代码

 

posted @   zzq12138  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示