[藍(lán)橋杯2015初賽]移動(dòng)距離

題目描述

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;
 
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容