Bits

Nancy喜欢做游戏!
汉诺塔是一个神奇的游戏,神奇在哪里呢?
给出3根柱子,最开始时n个盘子按照大小被置于最左的柱子。
如果盘子数为偶数,则需要将她们全部移动到最右侧的柱子上,否则将她们移动到中间的柱子上。
那么,Nancy该怎样移动呢?请你输出汉诺塔游戏的过程叭!

输入描述:
共一行:一个整数n,表示最开始n个盘子(编号为1到n)的放置方法。

数据满足:。

输出描述:
共组:每组n+2行,每行个字符,用.表示空白区域,用|表示柱子区域,用*表示盘子。组与组之间请输出个-。
具体输出方式请参看样例进行理解。
示例1
输入

2

输出

...................
...|.....|.....|...
..***....|.....|...
.*****...|.....|...
-------------------
...................
...|.....|.....|...
...|.....|.....|...
.*****..***....|...
-------------------
...................
...|.....|.....|...
...|.....|.....|...
...|....***..*****.
-------------------
...................
...|.....|.....|...
...|.....|....***..
...|.....|...*****.
#include
#define rep(i,s,e) for(int i=s; i
#define dep(i,e,s) for(int i=e; i>=s; --i)
using namespace std;
int n,t[5],s[15][5];
void print(){
     
	rep(i,1,3*(2*n+1)+5) putchar('.');
	putchar('\n'); dep(i,n+1,1){
     
		rep(j,1,4){
     
			rep(k,0,n-s[i][j]+1) putchar('.');
			rep(k,0,s[i][j]) putchar('*');
			putchar(s[i][j]?'*':'|');
			rep(k,0,s[i][j]) putchar('*');
			rep(k,0,n-s[i][j]) putchar('.');
		} putchar('.'); putchar('\n');
	}
}
void move(int a,int b){
     
	s[++t[b]][b]=s[t[a]][a]; s[t[a]--][a]=0;
	rep(i,1,3*(2*n+1)+5) putchar('-');
	putchar('\n'); print();
}
void solve(int n,int a,int b,int c){
     
	if(n==1) return move(a,c);
	solve(n-1,a,c,b); move(a,c);
	solve(n-1,b,a,c);
}
int main(){
     
	cin>>n; rep(i,1,n+1) s[++t[1]][1]=n-i+1;
	print(); solve(n,1,2+(n&1),3-(n&1));
}

你可能感兴趣的:(牛客,模拟,c++,Bits,汉诺塔,字符串)