汉诺塔的递归实现
#include<stdio.h>
void move(char a,char b)
{
printf("%c->%c\n",a,b);
}
void hanoi(int n,char a,char b,char c)
{
if(n==1)
move(a,c);
else
{
hanoi(n-1,a,c,b);
move(a,c);
hanoi(n-1,b,c,a);
}
}
int main()
{
int n;
scanf("%d",&n);
hanoi(n,'A','B','C');
return 0;
}
还有一题,使用快速幂的汉诺塔问题,其实步数就是2^n-1 原题
#include<stdio.h>
int ksm(long long a,long long b,int c)
{
int count=1;
while(b>0)
{
if(b%2==1)
{
count=(count%c*a)%c;
}
b=b/2;
a=(a%c*a%c)%c;
}
return count;
}
int main()
{
int t;
long long n;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
printf("%d\n",ksm(2,n,1000000)-1);
}
return 0;
}
1299

被折叠的 条评论
为什么被折叠?



