Nancy喜歡做游戲!
漢諾塔是一個神奇的游戲,神奇在哪里呢?
給出3根柱子,最開始時n個盤子按照大小被置于最左的柱子,
如果盤子數為偶數,則需要將她們全部移動到最右側的柱子上,否則將她們移動到中間的柱子上,
那么,Nancy該怎樣移動呢?請你輸出漢諾塔游戲的程序叭!
輸入描述:
共一行:一個整數n,表示最開始n個盤子(編號為1到n)的放置方法,
資料滿足:,
輸出描述:
共組:每組n+2行,每行個字符,用.表示空白區域,用|表示柱子區域,用*表示盤子,組與組之間請輸出個-,
具體輸出方式請參看樣例進行理解,
示例1
輸入
2
輸出
...................
...|.....|.....|...
..***....|.....|...
.*****...|.....|...
-------------------
...................
...|.....|.....|...
...|.....|.....|...
.*****..***....|...
-------------------
...................
...|.....|.....|...
...|.....|.....|...
...|....***..*****.
-------------------
...................
...|.....|.....|...
...|.....|....***..
...|.....|...*****.
#include<bits/stdc++.h>
#define rep(i,s,e) for(int i=s; i<e; ++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));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263920.html
標籤:其他
下一篇:ecjtu-2020訓練賽(2)
