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

2021-07-14 16:40:57 字數 789 閱讀 6866

程式設計之美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))%5

j=(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...