码迷,mamicode.com
首页 > 其他好文 > 详细

汉诺双塔 (高精度)

时间:2019-01-05 19:48:22      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:team   sizeof   数据   技术   ==   http   次数   汉诺塔问题   mat   

https://www.luogu.org/team/show?teamid=2961

由普通汉诺塔问题,设数量为n时移动次数为a[n],则a[n]=a[n-1]+1+a[n-1]=2*a[n-1]+1. // 因为a[1]=1,所以a[n]=2^n-1.(找规律?) 故双塔就是2*(2^n-1).---》但这里没用到

因为数据忒大,所以得用高精度。// 这里参考了别人的

思路就是用数组来存储每一位数。

技术分享图片
 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<stdlib.h>
 8 #define mem(a) memset(a,0,sizeof(a))
 9 using namespace std;
10 int f[200];
11 int main()
12 {
13   int n;
14   cin>>n;
15   f[1]=1;
16   for(int i=2;i<=n;i++)
17   {
18       for(int k=1;k<=i-1;k++)
19         f[k]*=2; //越低位的数乘2的次数越多,因为公式就是前一项*2,在“递归”到再前一项
20       for(int k=1;k<=i-1;k++)
21         if(f[k]>=10) //进位
22       {
23           f[k]-=10;
24           f[k+1]++;
25       }
26       f[1]++;
27   }
28   for(int i=1;i<=200;i++) //双塔的*2
29     f[i]*=2;
30   for(int i=1;i<=200;i++)
31     if(f[i]>=10)
32   {
33      f[i]-=10;
34      f[i+1]++;
35   }
36   int m=200;
37   while(f[m]==0) //找到最高位
38     m--;
39   for(int i=m;i>=1;i--)
40    cout<<f[i];
41   return 0;
42 }
View Code

 

汉诺双塔 (高精度)

标签:team   sizeof   数据   技术   ==   http   次数   汉诺塔问题   mat   

原文地址:https://www.cnblogs.com/XXrll/p/10225376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!