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

2021-06-18 19:59:57 字數 692 閱讀 4918

一、題目原型

下過中國象棋的朋友都知道,雙方的「將

」和「帥

」相隔遙遠,並且它們不能照面。在象棋殘局中,許多高手能利用這一規則走出精妙的殺招。假設棋盤上只有「將」

和「帥」

二子(如圖

1-3所示)為了下面敘述方便,我們約定用a表示

「將」,

b表示「帥

」,那麼a和b的運動將被限制在己方的3x3的格仔中,a、b可以橫向或者縱向移動一格,但是不能沿對角線移動。當a、b處於一條直線上時,棋局結束。換言之,a、b不能在一條直線上,請編寫乙個程式輸出a、b的所有可能位置。

二、數學抽象

這個問題的大致思路是遍歷每個a、b可能出現的位置,然後組合、判斷,如果條件滿足就輸出。基於這個思路,我們發現a、b的位置都可以用這9個數字來描述。那麼怎麼判斷這兩個點是否在一條線上呢? 仔細研究之後,我們發現可以用求餘來解決,於是程式的**就出來了:

for (int i = 1; i <= 9; i++)}}

呵呵,第一篇《程式設計之美》的文章就這樣愉快的開始吧!

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

下過中國象棋的朋友都知道,雙方的 將 和 帥 相隔遙遠,並且不能照面。在象棋殘局中,許多高手能利用這一規則走出許多精妙的殺招。假設棋盤上只有 將 和 帥 二子。下面為了敘述方面,我們約定用a表示 將 b表示 帥 a和b分別被限制在自己的九宮格內,不能走出九宮格,不能走斜線,只能走橫豎線上的一步。請寫...

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

下過中國象棋的朋友都知道。雙方的 將 和 帥 相隔遙遠,並且不能照面。在象棋殘局中,許多高手座利用這一規則走出精妙的殺招。假設棋盤上只有 將 和 帥 二子 為了下面敘述方便,我們約定用a 表示 將 b表示 帥 a b二子被限制在己方3x3 的格仔裡運動。每一步,a b分別可以橫向或縱向移 動一格。但...

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

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