首页 > 其他 > 详细

汉诺塔

时间:2017-03-18 22:55:59      阅读:204      评论:0      收藏:0      [点我收藏+]
技术分享
 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5   int T, n, i;
 6   cin >> T;
 7   int x[100];
 8   while (T--)
 9   {
10     cin >> n;
11     for (i = 1; i <= n; i++)
12       cin >> x[i];
13     int cur = 3; //表示当前 金片应该在的针的编号 ,初始时表示最大的那个应当在3上
14     int ans = 0;
15     for (i = n; i > 0; i--) //从最大的开始
16     {
17       if (x[i] != cur) // 如果第i个金片的不在cur上 ,最好的情况下把它移到cur上需要 2^(n-1) 步
18       {
19         cur = 6 - cur - x[i];  // 根据第i个金片的位置确定第i-1个金片应该在的位置
20         ans += 1 << (i - 1);
21       }
22     }
23     cout << ans << endl;
24   }
25   return 0;
26 }
View Code

 

汉诺塔

原文:http://www.cnblogs.com/NWUACM/p/6576073.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!