有这样一个包含9个圆圈的数字。将1~8这8个数字随机的填写到该数阵的外层圆圈中,只剩下中间的一个空圆圈。规定每个数字只能按照数阵中的直线中一个圆圈移动到另外一个空的圆圈中。通过若干步的移动,要求将该数字移动成为顺序的数字状态。编写程序,输出数字移动的每一步的过程。
因为中间的圆圈是空的,所以使用中间的圆圈进行数据的移动。将数字移动到指定的位置。停止,进行下一次的移动操作。我们可以数组m[0]最终保存数字1,m[1]最终保存数字2...,m[7]最终保存数字8,因此使用冒泡排序进行,代码如下:
- #include <stdio.h>
-
-
getStep(int m[])
-
{
-
int i,j,tmp;
-
for(i=0; i<7; i++)
-
for(j=0; j<7-i; j++)
-
if(m[j] >=m[j+1]){
-
tmp = m[j];
-
m[j] = m[j+1];
-
m[j+1] = tmp;
-
-
printf("%d#(%d)-->0#\n",j+1,m[j+1]);
-
printf("%d#(%d)-->%d#\n",j+2,m[j],j+1);
-
printf("0#-->%d#(%d)\n",j+2,m[j+2]);
-
}
-
-
printf("\n");
-
}
-
-
print(int m[])
-
{
-
printf("[%d]--[%d]--[%d]\n",m[0],m[1],m[2]);
-
printf(" | %c | %c |\n",92,47);
-
printf("[%d]--[ ]--[%d]\n",m[7],m[3]);
-
printf(" | %c | %c |\n",47,92);
-
printf("[%d]--[%d]--[%d]\n",m[6],m[5],m[4]);
-
}
-
-
int main(int argc, char *argv[])
-
{
-
int i,m[8];
-
printf("please input 8 integer(1~8) to arrange this matrix\n");
-
for(i=0; i<8; i++)
-
scanf("%d",&m[i]);
-
printf("the initial data matrix is like\n");
-
print(m);
-
printf("\nmove step:\n");
-
getStep(m);
-
printf("the result of moveing is\n");
-
print(m);
-
-
return 0;
-
}
执行结果如下:
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out
please input 8 integer(1~8) to arrange this matrix
1 2 3 4 5 8 7 6
the initial data matrix is like
[1]--[2]--[3]
| \ | / |
[6]--[ ]--[4]
| / | \ |
[7]--[8]--[5]
move step:
6#(8)-->0#
7#(7)-->6#
0#-->7#(6)
7#(8)-->0#
8#(6)-->7#
0#-->8#(8)
6#(7)-->0#
7#(6)-->6#
0#-->7#(8)
the result of moveing is
[1]--[2]--[3]
| \ | / |
[8]--[ ]--[4]
| / | \ |
[7]--[6]--[5]
阅读(1833) | 评论(0) | 转发(0) |