題目描述
X星球居民小區(qū)的樓房全是一樣的,并且按矩陣樣式排列。
其樓房的編號(hào)為1,2,3... 當(dāng)排滿一行時(shí),從下一行相鄰的樓往反方向排號(hào)。
比如:當(dāng)小區(qū)排號(hào)寬度為6時(shí),開(kāi)始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 .....
我們的問(wèn)題是:已知了兩個(gè)樓號(hào)m和n,需要求出它們之間的最短移動(dòng)距離
(不能斜線方向移動(dòng))
輸入
輸入存在多組測(cè)試數(shù)據(jù)
輸入為3個(gè)整數(shù)w m n,空格分開(kāi),都在1到10000范圍內(nèi)
w為排號(hào)寬度,m,n為待計(jì)算的樓號(hào)。
輸出
要求輸出一個(gè)整數(shù),表示m n 兩樓間最短移動(dòng)距離。
樣例輸入
6 8 2
4 7 20
樣例輸出
4
5
我就搞不懂了,這道題我能錯(cuò)那么多次!
#include <iostream>
#include <cmath>
using namespace std;
void func(int w, int n, int &x, int &y)
{
x = (n - 1)/w;//第幾行
y = (n - 1)%w;//第幾列
if (x%2 != 0)//判斷奇偶列
{
y = w - 1 - y;//奇數(shù)行反序排列
}
}
int main()
{
int w,m,n,x1,y1,x2,y2;
while(cin >> w >> m >> n){
func(w, m, x1, y1);//第一個(gè)點(diǎn)的坐標(biāo)
func(w, n, x2, y2);//第二個(gè)點(diǎn)的坐標(biāo)
cout << abs(x1 - x2) + abs(y1 - y2) << endl;
}
return 0;
}