移动距离(蓝桥杯模拟题)
1219. 移动距离
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。
其楼房的编号为 1,2,3…1,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 两楼间最短移动距离。
数据范围
1≤w,m,n≤100001≤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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】