第六屆藍橋杯C/C++B組第八題 移動距離

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<cmath>
using namespace std;
int main()
{
    int w,m,n;
    scanf("%d%d%d",&w,&m,&n);
    int x1,x2,y1,y2;
    x1=(m-1)/w;
    y1=(m-1)%w;
    x2=(n-1)/w;
    y2=(n-1)%w;
    if(x1%2)
        y1=w-y1-1;
    if(x2%2)
        y2=w-y2-1;
    printf("%d\n",abs(x1-x2)+abs(y1-y2));
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章