棋子移動題解

2021-10-07 16:15:37 字數 1025 閱讀 1401

魔法世界的歷史上曾經出現過一位赫赫有名的不敗戰神陳慶之,陳慶之以棋道悟兵法,一生身經數百戰,沒有一場敗績,而且沒有一場不是在絕對的劣勢中大勝敵軍。

受此影響,魔法世界開始流行一種叫棋子移動的遊戲,即有2n個棋子(n≥4)排成一行,開始位置為白子全部在左邊,黑子全部在右邊,例如當n=4時,棋子排列情況為:

〇〇〇〇●●●●

移動棋子的規則是:每次必須同時移動相鄰兩個棋子,顏色不限,可以左移也可以右移到空位上去,但不能調換兩個棋子的左右位置.每次移動必須跳過若干個棋子

(不能平移),要求最後能移成黑白相間的一行棋子。例如當n=4時,最終排列情況為:

〇●〇●〇●〇●

試求出移動步驟。

這道題剛剛看到我們不難推測出這是一道遞迴題,而且是一道和「漢諾塔」極其相似的題。之後有的人和我一樣去手算了一遍樣例,但後來我發現其實不用列舉太多:

根據前面我們推測出這是一道與漢諾塔相似的題,那就和「漢諾塔」一樣去推測棋子移動的規律:

通過觀測題目給出的樣例

4,5-->9,10

8,9-->4,5

2,3-->8,9

7,8-->2,3

1,2-->7,8

把上面的分成兩個一組來看,有規律:n, n + 1 --> 2 * n + 1, 2 * n + 2 和 2 * n, 2 * n + 1–>n, n + 1有了這個規律我們就只用考慮n是多少就可以了。其次讓我們繼續來列舉n為5時,根據上面的規律可得:(—為空格)

第一步:5,6–>11,12 〇〇〇〇●●●●——〇● 讓後就變成了n = 4的情況,這樣兩兩關係就出來了,於是乎遞推也出來了。

#include #include #include #include using namespace std;

int n, k = 0;

void pr(int j)

void ss(int s)

else }

int main()

棋子移動 1295

這道題比較難 題目描述 有2n個棋子 n 4 排成一行,開始位置為白色全部在左邊,黑色全部在右邊。其中字母o表示白色棋子,字母x表示黑色棋子 oooo x。移動棋子的規則是 每次必須同時移動相鄰兩個棋子,顏色不限,可以左移也可以右移一空位上去,但不能調換兩個棋子的左右位,每次移動必須跳過若干個棋子 ...

題解 翻棋子

description 有乙個4 4的棋盤,放有16枚棋子。每個棋子都是一面黑一面白,一開始有的黑面朝上,有的白面朝上。下面是乙個例子,這個例子用文字描述為 bwbw wwww bbwb bwwb 我們可以任選乙個棋子,把它自己和它的相鄰棋子 上下左右,如果有的話 翻面。比如在例子中如果我們選第3行...

黑白棋子的移動

有2n個棋子 n 4 排成一行,開始位置為白子全部在左邊,黑子全部在右邊,如下圖為n 5的情形 移動棋子的規則是 每次必須同時移動相鄰的兩個棋子,顏色不限,可以左移也可以右移到空位上去,但不能調換兩個棋子的左右位置。每次移動必須跳過若干個棋子 不能平移 要求最後能移成黑白相間的一行棋子。如n 5時,...