P1259 黑白棋子的移動

2022-05-16 10:57:30 字數 1507 閱讀 1283

有2n個棋子(n≥4)排成一行,開始為位置白子全部在左邊,黑子全部在右邊,如下圖為n=5的情況:

移動棋子的規則是:每次必須同時移動相鄰的兩個棋子,顏色不限,可以左移也可以右移到空位上去,但不能調換兩個棋子的左右位置。每次移動必須跳過若干個棋子(不能平移),要求最後能移成黑白相間的一行棋子。如n=5時,成為:

任務:程式設計列印出移動過程。

乙個整數n(n<=100)

若干行,表示初始狀態和每次移動的狀態,用"o"表示白子,"*"表示黑子,"-"表示空行。

輸入 #1

7
輸出 #1

ooooooo*******--

oooooo--******o*

oooooo******--o*

ooooo--*****o*o*

ooooo*****--o*o*

oooo--****o*o*o*

oooo****--o*o*o*

ooo--***o*o*o*o*

ooo*o**--*o*o*o*

o--*o**oo*o*o*o*

o*o*o*--o*o*o*o*

--o*o*o*o*o*o*o*

將樣例每兩行分開一次:

ooooooo*******--

oooooo--******o*

oooooo******--o*

ooooo--*****o*o*

這裡可以明顯的看到相應的規律:

中間的"o*"與"--"交換

最左邊的"**"與"--"交換

然而最後四行並非如此……

ooo*o**--*  o*o*o*

o--*o**oo* o*o*o*

o*o*o*--o* o*o*o*

--o*o*o*o* o*o*o*

//在最後的4行結尾都是"o*o*o*"

//"oo"與"--"交換

//"--"與"*o"交換

//"o*"與"--"交換

//寫**時需要特判

#includeusing namespace std;

char a[10000];

int n,sp;

void mv(int k)

sp=k;

for(int i=1;i<=2*n+2;i++)

cout<>n;

sp=2*n+1;

for(int i=1;i<=n;i++)a[i]='o';

for(int i=n+1;i<=2*n;i++)a[i]='*';

a[2*n+1]='-';

a[2*n+2]='-';

for(int i=1;i<=2*n+2;i++)

cout

}

P1259 黑白棋子的移動

我們先分析一下樣例 ooooooo oooooo o oooooo o ooooo o o ooooo o o oooo o o o oooo o o o ooo o o o o ooo o o o o o o oo o o o o o o o o o o o o o o o o o 每兩行分一組的...

P1259 黑白棋子的移動 遞迴

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

洛谷 P1259 黑白棋子的移動

題目鏈結 遞迴 分治 打表 這題.一上來讓我有點兒蒙啊.但其實就在於找規律,舉幾個例子自己動手寫一下就恍然大悟了。比如這樣 當然,題目條件是4 n 100 只需要先將中間緊挨的黑白棋子和空格交換,再將最後兩個黑色棋子與空格交換就好啦!之後就很歡快地去敲鍵盤了!結果全部wa掉。然後才知道我畫的每個例子...