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

2021-08-14 20:52:53 字數 711 閱讀 2496

下過中國象棋的朋友都知道。雙方的「將」和「帥」相隔遙遠,並且不能照面。在象棋殘局中,許多高手座利用這一規則走出精妙的殺招。假設棋盤上只有「將」和「帥」二子 (為了下面敘述方便,我們約定用a 表示「將」,b表示「帥」)。

a、b二子被限制在己方3x3 的格仔裡運動。每一步,a、b分別可以橫向或縱向移

動一格。但不能沿對角線移動。另外,a不能面對b,也就是說,a 和b不能處於同一

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

如圖:

此題的關鍵在於最後乙個要求:**中只能使用乙個位元組儲存變數。

並不難想到此題的解決方案:

for(a:a的每個位置)

for(b:b的每個位置)

if(a和b不在同一直線)

輸出

但實際上寫的時候,由於只能用乙個變數,會發現內層迴圈很難寫

這個時候就會想到乙個方法:將變數拆開,用前後兩部分分別表示a和b

用到兩個小公式:

a%0x10 -> 後半個位元組

a>>4 -> 前半個位元組

結合上述想法,

1 #include2

int main()

9return

0;10 }

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

問題 現在有乙個象棋殘局,只剩下將a帥b,ab只能在3x3的格仔裡橫縱移動,而且ab不能照面。輸出a b的合法位置 要求 中只使用乙個變數 問題本身很簡單,難度在於只用乙個變數。解法一 位向量法,利用乙個8位byte儲存a b的位置,利用巨集抽象出對byte的操作 對l段賦值 對r段賦值 從byte...

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

引子問題 中國象棋將帥問題 在一把象棋的殘局中,象棋雙方的將帥不可以相見,即不可以在中間沒有其他棋子的情況下在同一列出現。而將 帥各被限制在己方的3 3的格仔中運動。相信大家都非常熟悉象棋的玩法吧,這裡就不詳細說明遊戲規則了。用a b代表將和帥,請寫出乙個程式,輸出a b所有合法的位置。要求在 中只...

1 2中國象棋將帥問題

include include 包含byte include using namespace std define half bit length 4 define fullmask 255 define lmask fullmask half bit length define rmask ful...