http://acm.hdu.edu.cn/showproblem.php?pid=2064
Hanno塔问题简要分析:
1:
条件为左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,
且不允许大盘放在小盘的上面。
思路:
把前n-1个盘看成整体,要移动第n个盘需要n-1个盘借助3从1->2,把第n个盘从1->3,把n-1个盘借助1从2->3;
故:f[n]=2*f[n-1]+1;f[1]=1;
n个盘共有2^n-1步
本题与前面的类似:
要把第n个盘从1->3,需要把n-1从1->3,3-1,1->3.
故有f[n]=3*f[n-1]+2;
f[1]=2;
化简得:f[n]=3^n-1;
3052541 | 2010-10-09 19:05:48 | Accepted | 2064 | 0MS | 180K | 679 B | G++ |
hdu2065 hanno
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 #include<math.h>
5 #define MIN (x,y) x<y?x:y;
6 int main()
7 {
8 __int64 n,count,i;
9 while(scanf("%I64d",&n)!=EOF)
10 {count=1;
11 for(i=0;i<n;i++)
12 count*=3;
13 count--;
14 printf("%I64d\n",count);
15 }
16 return 0;
17 }
18