程式設計之美之將帥問題學習筆記

2022-08-30 18:51:07 字數 1054 閱讀 2178

讓我恍然大悟的鏈結  所以這裡mark一記

這裡的取模運算到底是個什麼意思?????黑人問號

通常情況下來說,我用到取模運算的地方就是負載均衡的時候,通過乙個獨立的uuid進行取模,然後分配到指定的伺服器上,例如我的uuid=1,小明的uuid=8,但是我只有兩組伺服器,如何保證我每次進來的時候分配的伺服器是同一臺呢。這裡就用到了取模 %2即可。

「可以把變數i想象成乙個兩位九進製的變數,而i在計算機中儲存的值是i的十進位制表示。則i/9的計算機處理結果,即結果直接去掉小數點後部分的結果即是此九進製數的第二位,而i%9即是此九進製數的個位。本程式用此九進製數的第二位儲存a的位置,個位表示b的位置。最大值為88,即為十進位制的80.程式從十進位制的80,即九進製的88遍歷到十進位制的0,即九進製的0.將符合條件的位置全部輸出。」  引用 

書中的這種解法只用了乙個數去儲存兩個將帥出現的位置,這裡採用了9進製儲存,其中兩位是分別儲存不同將帥的位置。

這裡2位儲存9進製的最大值為88,換算成10進製為80,迴圈到10進製的0,總共有81種情況。

假設第一位儲存將帥a可能出現的位置,第二位儲存將帥b可能出現的位置

這裡的除9表示取第二個將帥的位置,學到了,(例如 99/10  /10=取十位的數字9, %10=個位數字9)小學除法的含義都還給老師了。。。慚愧。。。。。。。。。。

模3比較好理解,就是取將帥出現的第幾列,因為總共只有三列所以就是模3了。

因為while先會執行 i--, 這裡將i的初值設為81

byte i = 81

;

while(i--)

return

0;

我這裡用php寫了乙份,個人覺得更好理解一些吧

因為開始最大值為88,其實到00也會需要執行,這裡用了intval而不能用round是因為,round是四捨五入,intval不會。

round(3.6) = 4

intval(3.3)  = 3

<?php

$i = 80;

while ($i >= 0)

$i--;

}?>

程式設計之美 將帥問題

在中國象棋棋盤上,輸出將帥不衝突的所有的位置,只使用乙個變數。想法 i 將帥能執行的空間 3 x 3,如果將在圖中 a的位置,帥在下面的6個位置都是合法的,圖中將帥不衝突的位置一共有 6 x 9 54 個 4 個bit 可以表示 16個狀態,那麼乙個char型的高4位可以表示將的位置,低4位可以用來...

程式設計之美 遊戲之樂 中國象棋將帥問題

下過中國象棋的朋友都知道,雙方的 將 和 帥 相隔遙遠,並且不能照面。在象棋殘局中,許多高手能利用這一規則走出許多精妙的殺招。假設棋盤上只有 將 和 帥 二子。下面為了敘述方面,我們約定用a表示 將 b表示 帥 a和b分別被限制在自己的九宮格內,不能走出九宮格,不能走斜線,只能走橫豎線上的一步。請寫...

《程式設計之美》 1 2 中國象棋將帥問題

下過中國象棋的朋友都知道。雙方的 將 和 帥 相隔遙遠,並且不能照面。在象棋殘局中,許多高手座利用這一規則走出精妙的殺招。假設棋盤上只有 將 和 帥 二子 為了下面敘述方便,我們約定用a 表示 將 b表示 帥 a b二子被限制在己方3x3 的格仔裡運動。每一步,a b分別可以橫向或縱向移 動一格。但...