讓我恍然大悟的鏈結 所以這裡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分別可以橫向或縱向移 動一格。但...