程帅霞

不断受挫,不停起身,不断追寻,不止AC~~

导航

移动距离(编程大题)

 

 

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

 

 

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4  
 5 void func(int w, int n, int &x, int &y)
 6 {
 7     x = (n - 1)/w;//第几行
 8     y = (n - 1)%w;//第几列
 9     
10     if (x%2 != 0)//判断奇偶列
11     {
12         y = w - 1 - y;//奇数行反序排列 
13     }    
14 }
15  
16 int main()
17 {
18     int w,m,n,x1,y1,x2,y2;
19     cin >> w >> m >> n;
20     
21     func(w, m, x1, y1);//第一个点的坐标
22     func(w, n, x2, y2);//第二个点的坐标
23     cout << abs(x1 - x2) + abs(y1 - y2) << endl; 
24     return 0;
25 } 

 

posted on 2020-10-12 14:39  程帅霞  阅读(203)  评论(0编辑  收藏  举报