zoukankan      html  css  js  c++  java
  • 汉诺双塔 (高精度)

    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
  • 相关阅读:
    poj1179 Polygon
    poj2677 Tour
    MariaDB10多实例--mysqld_multi
    MariaDB10源码安装
    linux下php+freetds连接SQL server2012
    MariaDB yum安装
    mongoDB yum安装
    pxe 引导clonezilla live万能备份与还原
    (转) pppd 中文man页面
    Unix-like DisplayManager/LoginManager/WindowManager
  • 原文地址:https://www.cnblogs.com/XXrll/p/10225376.html
Copyright © 2011-2022 走看看