16.移动距离 - 蓝桥云课 (lanqiao.cn) 首先我们要知道是否反转行对于我们判断房间在第几行没有影响,但是对我们判断房间在第几列有影响:
求房间行号的公式: x/w
求列号公式:y%w
其中求列号之后要判断是否为奇数行,如果是奇数行那么就要反转一下列:w-1-y
我们发现两个房间号的距离可以通过横坐标+纵坐标之差求出(曼哈顿距离):
#include <iostream>
using namespace std;
int main()
{
int w,m,n;cin>>w>>m>>n;
m--,n--; //从0开始,减少特例
int x1=m/w,x2=n/w;
int y1=m%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)<<endl;
return 0;
}