找规律与模拟-黑白棋子的移动

该篇博客探讨了棋盘上黑白棋子匹配的规律,通过观察样例,作者发现存在两种移动方式:一黑一白交替移动到特定位置。通过编程实现模拟这些移动,最终得出四种可能的匹配状态。博客提供了详细的代码实现过程,帮助读者理解这一规律。
摘要由CSDN通过智能技术生成

题目链接
观察样例
在这里插入图片描述
不难发现在剩下最后三对黑白棋子待匹配以前是十分有规律的,那么我们寻找规律,再记最后剩下三对棋子的匹配方法即可.
观察发现有两种移动方式,一种是一黑一白,移动到- - 处,另外一种是两个黑移动到- -处,且第一种移动方式和第二种移动方式交替进行并且开始时总是由中间两个棋子先进行.那么接下来只要根据下标来进行模拟即可,我们记录中间位置的下标,与待交换空格的下标,发现7.8->15.16 7.8->13.14 6.7->13.14 6.7->11.12 发现规律详情见代码.

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int s1, s2, k1, k2;
char c[4][11] = { "--o*o*o*o*","o*o*o*--o*","o--*o**oo*","ooo*o**--*"};//打表最终4种情况
char t[1005];
char ans[1005];
void move1(int s, int k);
void move2(int s, int k);
void innit(int n)//初始化
{
	for (int i = 0; i < n; i++)
		ans[i] = 'o';
	for (int i = n; i < 2 * n; i++)
		ans[i] = '*';
	ans[2 * n] = '-', ans[2 * n + 1] = '-';
	cout << ans<<endl;
}
void move1(int s,int k)//第一种方式
{   
	ans[s] = '-', ans[s - 1] = '-', ans[k] = 'o', ans[k + 1] = '*';
	cout << ans<<endl;
	k -= 2;
	move2(s, k);
}
void move2(int s, int k)//第二中方式
{    
	if (k == 6)return;
	ans[s] = '*', ans[s - 1] = '*', ans[k] = '-', ans[k + 1] = '-';
	cout << ans<<endl;
	s--;
	move1(s, k);
}
int main()
{
	int n;
	cin >> n;
	innit(n);
	int s = n,k=2*n;
	move1(n, k);
	cout << t;
	string ss;
	for (int i = 0; i < n - 4; i++)//后面已经排好
		ss += "o*";
	for (int i = 3; i>=0; i--)
		cout << c[i] << ss << endl;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值