题目描述
•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范围内
•w为排号宽度,m,n为待计算的楼号。
•要求输出一个整数,表示m n 两楼间最短移动距离。
•例如:
•用户输入:
•6 8 2
•则,程序应该输出:
•4
•再例如:
•用户输入:
•4 7 20
•则,程序应该输出:
•5
#include <stdio.h>
#include <stdlib.h>
int main() {
int w,x1,x2,y1,y2;
scanf("%d",&w);
int m,n;
scanf("%d %d",&m,&n);
y1=m/w;
y2=n/w;
x1=m%w;
x2=n%w;
if(x1==0){
x1=w;
y1=y1-1;
}
if(x2==0){
y2=y2-1;
x2=w;
}
if(y1%2!=0){
x1=w-x1+1;
}
if(y2%2!=0){
x2=w-x2+1;
}
int s;
s=abs(y1-y2)+abs(x1-x2);
printf("%d",s);
return 0;
}