分析:
假设有n个盘子在A上,将n-1个移到B上,再将第n个移到C上,n-1个盘子再从B移到A上,A的n-2移到B上,A的第n-1个盘子移到C上。
代码:
#include <stdio.h>
int transfer(int n,char A,char B,char C)
{
if(n>0)
{
printf("前%d个 %c--->%c\n",n-1,'A','B');
printf("第%d个 %c--->%c\n",n,'A','C');
printf("前%d个 %c--->%c\n",n-1,'B','A');
transfer(n-1,A,B,C);
}
}
int main()
{
int n=0;
char A='A',B='B',C='C';
scanf("%d",&n);
transfer(n,A,B,C);
return 0;
}
1995
找规律,利用递归实现
当有n个盘子时,1号盘子移动2^(n-1),
2号盘子移动2^(n-2)......
n号盘子移动2^(n-n)次;
#include <stdio.h>
__int64 re(int n, int k)
{
if (n == k)
return 1;
return re(n - 1, k)*2;
}
int main()
{
int t = 0;
while (scanf("%d", &t) != EOF)
{
while (t--)
{
int n = 0, k = 0;
scanf("%d%d", &n, &k);
printf("%I64d\n",re(n, k));
}
}
return 0;
}
1996
一样可以找规律利用递归实现:3^1=3, 3^3=27......
#include <stdio.h>
__int64 re(int n)
{
if (n == 1)
return 3;
return re(n - 1)*3;
}
int main()
{
int t = 0;
while (scanf("%d", &t) != EOF)
{
while (t--)
{
int n = 0, k = 0;
scanf("%d", &n);
printf("%I64d\n",re(n));
}
}
return 0;
}
结束语:
有参考网上的各类分析,代码。如有错误,请多见谅。