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

2021-07-23 11:57:00 字數 753 閱讀 4497

a表示「將」,b表示「帥」。用1~9表示a、b的座標。

請寫出乙個程式,輸出a、b所有合法位置。要求在**中只能使用乙個位元組儲存變數。

用乙個unsigned char型別變數儲存a、b的位置,前4bit表示a的位置,後4bit表示b的位置。

#include 

#define half_bits_length 4

#define fullmask 255

#define lmask (fullmask << half_bits_length)

#define rmask (fullmask >> half_bits_length)

#define lset(b, n) (b = ((rmask & b) | ((n) << half_bits_length)))

#define rset(b, n) (b = ((lmask & b) | (n)))

#define lget(b) ((lmask & b) >> half_bits_length)

#define rget(b) (rmask & b)

#define gridw 3

int main(void)

unsigned

char i = 81;

while (i--)

return

0;

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

即將面臨找工作,最近在看 程式設計之美 這本書。自己能力有限所以覺得有些題目難度不小,但仍覺受益匪淺,有時間一定再讀幾遍。下面是關於 中國象棋將帥問題 的一些心得 書中給出的演算法的精妙之處這裡不再贅述,給出自己的想法 原理與書中給出演算法相同,通過迴圈實現。對其中的任意乙個位置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種狀態,理論上乙個位元組儲存已經綽綽有餘了。題中...