閒聊藍橋杯JAVA 移動距離

2021-08-17 12:30:35 字數 1561 閱讀 8344

d:今晚做這一道題

移動距離

x星球居民小區的樓房全是一樣的,並且按矩陣樣式排列。其樓房的編號為1,2,3.

..當排滿一行時,從下一行相鄰的樓往反方向排號。

比如:當小區排號寬度為6時,開始情形如下:12

3456

1211109

871314

15...

..我們的問題是:已知了兩個樓號m和n,需要求出它們之間的最短移動距離(不能斜線方向移動)

輸入為3個整數w m n,空格分開,都在1到10000範圍內

要求輸出乙個整數,表示m n 兩樓間最短移動距離。

例如:使用者輸入:68

2則,程式應該輸出:

4再例如:

使用者輸入:47

20則,程式應該輸出:

5資源約定:

峰值記憶體消耗(含虛擬機器) <

256m

cpu消耗 <

1000ms

z:這道題我以前接觸過

public

static

void

main(string args) else

if(two%length==0)else

if(ox%2==0)

if(tx%2==0)

system.out.println(math.abs(ox-tx)+math.abs(oy-ty));

}

m:首先有個語法問題,math.abs()是幹嘛用的?

z:算出絕對值。

m:one是第一棟樓的編號,int ox=one/length;表示什麼?

z:ox是區域高的部分,通過 樓房編號/寬度 得到。但是除了每行的最後乙個數,其他的 樓房編號/寬度 得出的高都比實際少1。

所以要對普遍情況進行處理,判斷是否是最後乙個數,除了最後乙個數其他的都要+1。

if(one%length==0)else
m:那int oy=one%length;就是計算它的寬度啦。不過它的順序是s型增加,怎麼來確定寬度差呢?

z:這就是這道題的核心部分,區分不同情況的寬度差。

當處於最後乙個位置的時候,寬度變成了0 ,編號6 % 樓數6 == 0。所以要將其恢復為寬度長度

if(one%length==0)

m:那這段**是怎麼用的?

if(ox%2==0)
z:因為偶數行的漸變序是從右到左,所以需要把它的位置進行轉化,轉化為左到右

if(ox%2==0)
m:但是為什麼要算出絕對值呢?

math.abs(ox-tx)+math.abs(oy-ty)
z:因為不知道大的數在前面還是小的數在前面,所以相減之後可能是負數,但是我們要的結果只是相對差,所以算出其絕對值即可。

m:總結一下,這道題的重點就是通過/ 和 % 算出寬高差,而s型的寬處理,需要將從右到左的排序轉化為從左到右。

閒聊藍橋杯JAVA 鐵軌

d 現在研究這道題,之前忽略掉的。某城市有乙個火車站,有n節車廂從a方向駛入車站,按進站的順序編號為1 n。現讓它們按照某種特定的順序進入b方向的鐵軌並駛出車站。為了重組車廂,你可以借助中轉站c。在程式中輸入車廂數目和出站的特定順序,如果可以則輸出yes,否者輸出no。樣例輸入 51 2345 55...

藍橋杯 移動距離

藍橋杯2015第六屆c語言真題 第8題 移動距離 8 移動距離 x星球居民小區的樓房全是一樣的,並且按矩陣樣式排列。其樓房的編號為1,2,3.當排滿一行時,從下一行相鄰的樓往反方向排號。比如 當小區排號寬度為6時,開始情形如下 1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 ...

藍橋杯 移動距離

x星球居民小區的樓房全是一樣的,並且按矩陣樣式排列。其樓房的編號為 1,2,3 當排滿一行時,從下一行相鄰的樓往反方向排號。比如 當小區排號寬度為 6 時,開始情形如下 1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 我們的問題是 已知了兩個樓號 m 和 n,需要求出它們之間...