xtu p1162 黑白棋子的移动

描述

有n个棋子(n≥4)排成一行,开始位置为白子全部在左边,黑子全部在右边,如下图为n=5的情形:○○○○○●●●●●

移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如n=5时,成为:○●○●○●○●○●

任务:编程打印出移动过程。
格式
输入格式

输入n。
输出格式
移动过程。
样例
输入样例

7

输出样例

step 0:ooooooo*******–
step 1:oooooo–o
step 2:oooooo
*–o*
step 3:ooooo–oo
step 4:ooooo
–oo
step 5:oooo–ooo
step 6:oooo
***–ooo*
step 7:ooo–oooo*
step 8:oooo**–ooo*
step 9:o–o**ooooo*
step10:ooo*–oooo
step11:–ooooooo*

限制
时间限制: 1000 ms
内存限制: 65536 KB

int m;
void tiaoqi(char s[],int n,int bol){
	printf("step%2d:%s\n",m,s);
	m++;
	int len=strlen(s);
	if(n==0) return;
	else if(n<=4){
		if(n==4) 
		s[3]='*',s[4]='o',s[7]=s[8]='-';
		else if(n==3) 
		s[1]=s[2]='-',s[7]=s[8]='o';
		else if(n==2) 
		s[1]='*',s[2]='o',s[6]=s[7]='-';
		else if(n==1) 
		s[0]=s[1]='-',s[6]='o',s[7]='*';
		tiaoqi(s,n-1,0); 
	}else{
		if(bol==1){
			for(int i=0;i<len-1;i++){
				if(s[i]=='-'&&s[i+1]=='-'){
					s[i]='o';
					s[i+1]='*';
					break;
				}
			}
			for(int i=0;i<len-1;i++){
				if(s[i]=='o'&&s[i+1]=='*'){
					s[i]='-';
					s[i+1]='-';
					break;
				}
			}
		
			tiaoqi(s,n-1,0);
		}else{
			for(int i=0;i<len-1;i++){
				if(s[i]=='-'&&s[i+1]=='-'){
					s[i]='*';
					s[i+1]='*';
					break;
				}
			}
			for(int i=0;i<len-2;i++){
				if(s[i]=='*'&&s[i+1]=='*'&&s[i+2]=='o'){
					s[i]='-';
					s[i+1]='-';
					break;
				}
			}
			tiaoqi(s,n-1,1);
		}
	}
}

int main(){
	int n;cin>>n;
	char qp[2*n+3];
	for(int i=0;i<n;i++){
		qp[i]='o';qp[2*n-i-1]='*';
	}
	qp[2*n]='-',qp[2*n+1]='-',qp[2*n+2]='\0';
	//for(int i=0;i<=2*n+1;i++) printf("%c",qp[i]);
	tiaoqi(qp,2*n-3,1);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值