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,需要求出它們之間...