汉诺塔问题合集之汉诺塔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的形式。所以代码很简单就出来了。
解题感受:
  很水很水···但是通过做这几道题我发现,其实对于这类的题找到规律比看懂题目更重要,其实这几道题都是,只要找到规律就非常简单的题····

猜你喜欢

转载自www.cnblogs.com/wsy107316/p/10691230.html