题目描述 有 2n 个棋子(n≥4)排成一行,开始位置为白色全部在左边,黑色全部在右边。(其中字母 O 表示白色棋子,字母 X 表示黑色棋子)OOOOXXXX。移动棋子的规则是:每次必须同时移动相邻两个棋子,颜色不限,可以左移也可以右移一空位上去,但不能调换两个棋子的左右位,每次移动必须跳过若干个棋子(不能平移),要求最后能够移成黑白相间的一行棋子。例如当 n=4 时,最终排列情况为:OXOXOXOX。输出棋子移动的过程。 输入描述 多组输入,每组一个正整数,占一行。 输出描述 输出移动步骤,每一步操作占一行。用c语言写
时间: 2024-04-25 07:26:10 浏览: 179
以下是 C 语言的实现:
```c
#include <stdio.h>
int n, s;
void move(int k) {
if (k == 4) {
printf("OOOOXXXX\n");
printf("OOXOOXXX\n");
printf("OOXXOXXX\n");
printf("OOXXXOXX\n");
printf("OOXXXXOX\n");
printf("OXOXXXOX\n");
printf("OXXOXXOX\n");
printf("OXXXOXXO\n");
printf("OXXXXOXO\n");
return;
}
move(k - 1);
printf("OX");
if (s % 2 == 0) {
for (int i = 0; i < k - 2; i++) printf("O");
printf("XX");
} else {
for (int i = 0; i < k - 2; i++) printf("X");
printf("OO");
}
for (int i = 0; i < k - 2; i++) printf("XO");
printf("\n");
s++;
move(k - 1);
}
int main() {
while (scanf("%d", &n) == 1) {
s = 0;
move(n);
}
return 0;
}
```
需要注意的是,对于 C 语言,需要判断 `scanf` 函数的返回值,以判断输入是否成功。在本题中,每组输入只有一个整数,因此需要判断 `scanf` 的返回值是否为 1。
阅读全文