蓝桥杯 移动距离

117 阅读1分钟

16.移动距离 - 蓝桥云课 (lanqiao.cn) 首先我们要知道是否反转行对于我们判断房间在第几行没有影响,但是对我们判断房间在第几列有影响:

求房间行号的公式: x/w

求列号公式:y%w

其中求列号之后要判断是否为奇数行,如果是奇数行那么就要反转一下列:w-1-y

我们发现两个房间号的距离可以通过横坐标+纵坐标之差求出(曼哈顿距离): image.png

#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;
}