实验题1.
(10分)黑白子交换: 有三个白子和三个黑子如下图布置:(-表示一个空格)
○ ○ ○ - ● ● ●
游戏的目的是用多少的步数将上图中白子和黑子的位置进行交换:
● ● ● - ○ ○ ○
游戏的规则是:一次只能移动一个棋子;棋子可以向空格中移动,也可以跳过一个对方的格子进入空格,但不能向后跳,也不能跳过两个子。请用计算机实现上述游戏。
程序运行示例如下:
//注:后面的绿色数字仅为我的思考过程,并不是程序示例的一部分
No. 0:-----------
|*|*|*| |@|@|@| 1 3 5 7 9 11 13
-----------
No. 1:-----------
|*|*| |*|@|@|@| 7 5
-----------
No. 2:-----------
|*|*|@|*| |@|@| 5 9
-----------
No. 3:-----------
|*|*|@|*|@| |@| 9 11
-----------
No. 4:-----------
|*|*|@| |@|*|@| 11 7
-----------
No. 5:-----------
|*| |@|*|@|*|@| 7 3
-----------
No. 6:-----------
| |*|@|*|@|*|@| 3 1
-----------
No. 7:-----------
|@|*| |*|@|*|@| 1 5
-----------
No. 8:-----------
|@|*|@|*| |*|@| 5 9
-----------
No. 9:-----------
|@|*|@|*|@|*| | 9 13
-----------
No.10:-----------
|@|*|@|*|@| |*| 13 11
-----------
No.11:-----------
|@|*|@| |@|*|*| 11 7
-----------
No.12:-----------
|@| |@|*|@|*|*| 7 3
-----------
No.13:-----------
|@|@| |*|@|*|*| 3 5
-----------
No.14:-----------
|@|@|@|*| |*|*| 5 9
-----------
No.15:-----------
|@|@|@| |*|*|*| 9 7
-----------
以下程序只是我个人的一种方法, 不见得是最好的方法,我是通过上面的分析然后写出每次交换的位置然后用一个一维数组保存下来,后续的操作就只是按照这个一维数组交换字符,仅此而已。题的方法肯定不止一种,请大家酌情选择。
#include <stdio.h>
#define N 15
void jiaohuan(char a[],int dex[]);
void printHanshu(char a[]);
int num=0;
int main()
{
char star[N]={'|','*','|','*','|','*','|',' ','|','@','|','@','|','@','|'};
//竖线表示格子也不管
int Index[16]={7,5,9,11,7,3,1,5,9,13,11,7,3,5,9,7};
//这里是16不是15,若是15则最后一次没有换(9 7没有互换)
jiaohuan(star,Index);
return 0;
}
void jiaohuan(char a[],int dex[])
{
char temp;
int i;
printHanshu(a);
for(i=0;i<=14;i++)
{
temp = a[dex[i]];
a[dex[i]] = a[dex[i+1]];
a[dex[i+1]] = temp;
printHanshu(a); //先交换再打印
}
}
void printHanshu(char a[])
{
int i;
printf("No.%2d:-----------\n",num);
printf(" ");
for(i=0;i<15;i++)
{
printf("%c",a[i]);
}
printf("\n -----------\n");
num++;
}
版权声明:本文为jjnmeture原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。