Q:有一个包含9个圆圈的数阵,将1~8这8个数随机写到数阵外围,只剩下中间一个空圆圈。规定每个数字只能按照数阵中的直线从一个圆圈移动到另一个空的圆圈中。通过若干步的移动,将数阵移动成

1--2--3

8--  --4//中间数字是空格

7--6--5 

编写程序,输出数字每一步的移动过程。

 

#include <iostream>
#include<cstdio>
using namespace std;
int m[8];
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 --> 0)\n",j+1);	//输出移动步骤 
				printf("(%d --> %d)\n",j+2,j+1);
				printf("(0 --> %d)\n",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 i;
	printf("input 8 integer to arrange this matrix\n");
	for(i=0;i<8;i++)
	scanf("%d",&m[i]);
	printf("initial data matrix is like\n");
	print(m);
	printf("\nMOVE STEP:\n");
	getstep(m);
	printf("the result of moving is\n");
	print(m);
	return 0;
}

  

posted on 2017-04-30 09:41  王小东大将军  阅读(251)  评论(0编辑  收藏  举报