#include <stdio.h>
int n, cnt;
//hannuota(n, A, B, C) //A->C , B辅助
void hannuota(int n, char A, char B, char C)
{
if(n==1){ //当 n 等于1
printf("%c->%c\n", A, C);//输出 A->C
cnt++;
}
else{ //否则
hannuota(n-1, A, C, B);
printf("%c->%c\n", A, C);
cnt++;
hannuota(n-1, B, A, C);
}
}
int main()
{
scanf("%d", &n);
hannuota(n, '1', '2', '3');
printf("%d\n", cnt);
return 0;
}
有个学生写了一个汉诺塔的游戏
#include<bits/stdc++.h>
using namespace std;
int num[4][10],n;
void print(){
for(int i=1;i<=n;i++){
for(int j=1;j<=3;j++){
if(num[j][i]) printf("%d ",num[j][i]);
else printf("| ");
}
printf("\n");
}
printf("_ _ _\n");
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
num[1][i]=i;
}
print();
while(num[3][1]!=1){
int a=0,b=0,c=0,d=0;
scanf("%d %d",&a,&b);
for(int k=1;;k++){
if(num[a][k]!=0){
c=num[a][k];
num[a][k]=0;
d=k;
break;
}
// if(k==n){
// printf("False\n");
//
// }
}
// printf("%d\n",num[3][2]);
for(int k=1;;k++){
if(num[b][k]!=0){
if(c>num[b][k]){
// printf("放置错误\n");
printf("False\n");
num[a][d]=c;
break;
}
num[b][k-1]=c;
// printf("%d %d\n",b,k-1);
break;
}
if(k==n){
num[b][k]=c;
break;
}
}
// printf("%d\n",num[3][2]);
print();
}
if(num[3][1]==1){
printf("恭喜你");
return 0;
}
}