中國象棋,棋盤上只有「將」和「帥」,按照中國象棋中兩者不能照面的規則,輸出兩者所有的合法位置組合,要求在**中只能使用乙個變數。
將象棋裡兩個老大分別可以走的9個位置編號如下:
1 2 3
4 5 6
7 8 9
書中給出的第乙個解法好長,我想到了後面的解法認為不需要這麼複雜的實現也暫時沒有去看了……以下是我的想法:
編號後很快可以發現每一列的共同點是編號對模3運算的結果是相等的,問題就好解決了,兩者的位置編號模3運算結果不等則是合法的位置組合,將其輸出即可,否則是不合法的。這樣的過程用2層巢狀的迴圈即可,那麼問題就是怎樣只使用乙個變數實現2層巢狀的迴圈。
這個題給我的啟發主要是這樣乙個迴圈的實現,如下:
int i = 81;
while (i-- != 0)
用乙個int實現了等效於如下的迴圈:
for (int i = 8; i > 0; i--)
}
《程式設計之美》 中國象棋將帥問題
即將面臨找工作,最近在看 程式設計之美 這本書。自己能力有限所以覺得有些題目難度不小,但仍覺受益匪淺,有時間一定再讀幾遍。下面是關於 中國象棋將帥問題 的一些心得 書中給出的演算法的精妙之處這裡不再贅述,給出自己的想法 原理與書中給出演算法相同,通過迴圈實現。對其中的任意乙個位置k,其餘8個位置都可...
程式設計之美 中國象棋將帥問題
首先,我們歸納總結一下展開原理,對於 a b i 我們可以用如下公式展開 loop1 i b loop2 i b a 其中loop1是內層迴圈,loop2是外層迴圈 那麼如果 a 本身就是 k j 組成的呢?由於 k j i b 套用公式得到 loop1 i b j loop2 i b j k 由此...
程式設計之美 中國象棋將帥問題
程式設計之美1.2,題目不再重複了,這裡主要研究方法二。核心思想就是兩重迴圈分別從1到9,如果兩個變數處於同一直線則跳過,不然就列印出兩個變數。題目的要求在於只能用乙個位元組來儲存,所以就需要空間上進行巧妙的變換。兩個變數從1到9,其實只有9 9 81種狀態,理論上乙個位元組儲存已經綽綽有餘了。題中...