汉诺塔问题合集之汉诺塔6
http://acm.hdu.edu.cn/showproblem.php?pid=1996
汉诺塔6:
呃。。。这道题自己并没有看懂;以下是大佬的解析:
汉诺塔由n个大小不同的盘子跟三个柱子组成。开始时,n个盘子从大到小套在一个柱子上,然后将n个盘子移到另一个柱子上,但是要求大盘子不能在小盘子上面。这道题要求求n个不同的盘子放在三个柱子上,能有多少种放置情况。
基本思路为思考f(n)与前面的递推关系,每加一个盘子,这个盘子可以放到三个柱子上,所以后面一个是前面的三倍,即f(n)=3*f(n-1)。
代码如下:
1 /* */ 2 #include<bits/stdc++.h> 3 using namespace std; 4 int main() 5 { 6 long long int n,m,i,a[31]; 7 a[1]=3; 8 for(i=2; i<31; ++i) 9 a[i]=3*a[i-1]; 10 cin>>n; 11 while(n--) 12 { 13 cin>>m; 14 cout<<a[m]<<endl; 15 } 16 }
以下是我看的另一的大佬的说法感觉也是值得学习的:
这道题也是一道输出相应的值的问题。
解题思路:
其实这道题我并没有看懂,但是通过样例我发现其实就是n^3的形式。所以代码很简单就出来了。
解题感受:
很水很水···但是通过做这几道题我发现,其实对于这类的题找到规律比看懂题目更重要,其实这几道题都是,只要找到规律就非常简单的题····