移动距离
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3…
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为6时,开始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 …..
我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)
输出为3个整数w m n,空格分开,都在1到10000范围内
要求输出一个整数,表示m n 两楼间最短移动距离。
例如:
用户输入:
6 8 2
则,程序应该输出:
4
再例如:
用户输入:
4 7 20
则,程序应该输出:
5
#include <iostream>
using namespace std;
//abs : 返回 x 的绝对值
int abs(int x){
return x>0?x:-x;
}
int main(){
//w : 小区排号宽度
//m,n : 两个楼号
//x1,x2,y1,y2 : 要求出的两个楼号的横纵坐标
//count : 最短距离
int w=0,m=0,n=0;
int x1,x2,y1,y2,count=0;
cin>>w>>m>>n;
m-=1;n-=1;//因为楼号从“1”开始 所以减 1
x1=m/w;//求出第几行 从 0 开始
y1=(x1%2==0)?(m%w):(w-m%w-1);//求出第几列 从 0 开始 奇偶行的列数方向不同
x2=n/w;
y2=(x2%2==0)?(n%w):(w-n%w-1);
count = abs(x1-x2)+abs(y1-y2);//边长减边长的和
cout<<count;
}
以满足以上两组数据要求