程式設計之美1.2, 題目不再重複了,這裡主要研究方法二。
核心思想就是兩重迴圈分別從1到9,如果兩個變數處於同一直線則跳過,不然就列印出兩個變數。題目的要求在於只能用乙個位元組來儲存,所以就需要空間上進行巧妙的變換。兩個變數從1到9,其實只有9*9=81種狀態,理論上乙個位元組儲存已經綽綽有餘了。
題中方法二給出的解法就是將ab的狀態轉換為兩位9進製的數,低位的數值i%9代表a的狀態,高位數值i/9代表b的狀態。**如下:
public
static
void
chess()
system.out.println("a"+(i%9+1)+"b"+(i/9+1));
}}
由此就由乙個位元組來代表了兩個變數的迴圈。由此得到啟發,還可以繼續擴充套件,比如三重迴圈四重迴圈,參考部落格。
舉個例子
public
static
void
n() }
}}
這是乙個三重迴圈,三個變數,但是其實一共也只有5*4*3=60中狀態,只是求i j k的方法稍有改變。
i=(counter/(3*4))%5j=(counter/3)%4
k=counter%3
public
static
void
n2()
}
執行後輸出的結果完全一樣。 《程式設計之美》 中國象棋將帥問題
即將面臨找工作,最近在看 程式設計之美 這本書。自己能力有限所以覺得有些題目難度不小,但仍覺受益匪淺,有時間一定再讀幾遍。下面是關於 中國象棋將帥問題 的一些心得 書中給出的演算法的精妙之處這裡不再贅述,給出自己的想法 原理與書中給出演算法相同,通過迴圈實現。對其中的任意乙個位置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 由此...
程式設計之美 中國象棋將帥問題
a表示 將 b表示 帥 用1 9表示a b的座標。請寫出乙個程式,輸出a b所有合法位置。要求在 中只能使用乙個位元組儲存變數。用乙個unsigned char型別變數儲存a b的位置,前4bit表示a的位置,後4bit表示b的位置。include define half bits length 4...