考研代码题:10.10 汉诺塔 爬楼梯 取球 猴子吃桃
汉诺塔
C语言 - 汉诺塔详解(最简单的方法,进来看看就懂)_汉诺塔c语言程序详解-CSDN博客
#include <stdio.h>void move(char begin,char end){printf("%c->%c\n",begin,end);
}
//begin开始杆,help辅助杆,end目的杆
void honi(int n,char begin,char help,char end){if(n==1){move(begin,end);}else{//按照位置表示作用//1.开始杆2.辅助杆3. 目的杆//将上面的n-1个盘子借助目的杆(end)移动到辅助杆(help) honi(n-1,begin,end,help);//将最下面第n个盘子移动到目的杆 move(begin,end);// 将现在在辅助杆子上n-1个盘子借助开始杆子移动到目的杆 honi(n-1,help,begin,end);}
}int main(){int n;scanf("%d",&n);char a = 'A',b = 'B',c = 'C';honi(n,a,b,c);return 0;
}
爬楼梯
#include <stdio.h>int stair(int n){if(n==1){return 1;}else if(n==2){return 2;} return stair(n-1)+stair(n-2);
}int main(){int n;scanf("%d",&n);printf("%d",stair(n));return 0;
}
取球问题
算法——取球问题(特殊球法)-CSDN博客
#include <stdio.h>int ball(int n,int m){if(n<m){return 0;}//m==0,只有一种情况:都不取 if(m==0) return 1;if(n==m){return 1;}//设置一个特殊球,一个不选这个特殊球ball(n-1,m),一个选ball(n-1,m-1)return ball(n-1,m)+ball(n-1,m-1);
}int main(){int n,m;scanf("%d %d",&n,&m);printf("%d",ball(n,m));return 0;
}
猴子吃桃
2、猴子吃桃问题。每天早上都吃了前一天剩下的一半零一个。_猴子吃桃子,每天吃桃子的一半零一个-CSDN博客
#include <stdio.h>int peach(int day,int n){if(day>=n){return 1;}return (peach(day+1,n)+1)*2;
}int main(){int n,day;scanf("%d",&n); printf("%d",peach(1,n));return 0;
}