A: 超级青蛙
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
一只超级青蛙一次可以跳上1级台阶,也可以跳上2级……它也能够跳上n级台阶。请问,该青蛙跳上一个n级的台阶总共有多少种跳法?
输入
输入一个正整数n表示台阶的数量。
输出
输出总的跳法数。
样例输入 Copy
1
2
样例输出 Copy
1
2
#include<stdio.h>
int f(int n)
{
if(n<3)
return n;
else
return f(n-1)*2;
}
int main(){
int n;
int d;
while(~scanf("%d",&n)){
d=f(n);
printf("%d\n",d);
}
return 0;
}
B: 汉诺塔
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
使用递归编写一个程序实现汉诺塔问题,要求在输入圆盘数量之后,输出圆盘的移动步骤,输出格式示例如下:
第1步:1号盘从A柱移至B柱
第2步:2号盘从A柱移至C柱
输入
多组测试用例,每组输入一个正整数n,n代表圆盘数量。
输出
每组输出之间有一行空行。
样例输入 Copy
3
样例输出 Copy
第1步:1号盘从A柱移至C柱
第2步:2号盘从A柱移至B柱
第3步:1号盘从C柱移至B柱
第4步:3号盘从A柱移至C柱
第5步:1号盘从B柱移至A柱
第6步:2号盘从B柱移至C柱
第7步:1号盘从A柱移至C柱
#include<stdio.h>
#include<string.h>
int d;
void f(int n, char a, char b, char c){
if(n == 1){
printf("第%d步:%d号盘从%c柱移至%c柱\n",d,n,a,c);
d++;
}
else {
f(n - 1, a, c, b);
printf("第%d步:%d号盘从%c柱移至%c柱\n",d,n,a,c);
d++;
f(n - 1, b, a, c);