首页 > 其他分享 >PTA-汉诺塔Ⅱ

PTA-汉诺塔Ⅱ

时间:2024-04-09 15:31:27浏览次数:19  
标签:柱子 Gardon int PTA 圆盘 汉诺塔 盘子

经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。恩,当然这个传说并不可信,如今汉诺塔更多的是作为一个玩具存在。Gardon就收到了一个汉诺塔玩具作为生日礼物。
  Gardon是个怕麻烦的人(恩,就是爱偷懒的人),很显然将64个圆盘逐一搬动直到所有的盘子都到达第三个柱子上很困难,所以Gardon决定作个小弊,他又找来了一根一模一样的柱子,通过这个柱子来更快的把所有的盘子移到第三个柱子上。下面的问题就是:当Gardon在一次游戏中使用了N个盘子时,他需要多少次移动才能把他们都移到第三个柱子上?很显然,在没有第四个柱子时,问题的解是2^N-1,但现在有了这个柱子的帮助,又该是多少呢?

输入格式:

包含多组数据,每个数据一行,是盘子的数目N(1<=N<=64)。

输出格式:

对于每组数据,输出一个数,到达目标需要的最少的移动数。

输入样例:

在这里给出一组输入。例如:

1
3
12

输出样例:

在这里给出相应的输出。例如:

1
5
81

思路: 

这是清华大学姚班期末考试原题,要是按算法做的话比较麻烦,算法思路非常复杂

在这里我给到一个投机取巧的办法,找到四柱汉诺塔递增的规律,然后求解:

四柱汉诺塔最小步数的规律是:f(n)=f(n-1)+2^((int)(sqrt(8*n-7)-1)/2) (n>1),其中f(1)=1(n为盘子数)
这个规律足足花了我一个下午才找出来,在最后几秒钟才恍然大悟,总算有点成就感。

#include<stdio.h>
#include<math.h>
int hano(int n){
    if(n==1) return 1;
    else return pow(2,((int)sqrt(8*n-7)-1)/2)+hano(n-1);
}
int main(){
    int n;
    while(scanf("%d",&n)==1){
        printf("%d\n",hano(n));
    }
}

结果为编译成功

标签:柱子,Gardon,int,PTA,圆盘,汉诺塔,盘子
From: https://blog.csdn.net/hyccccc_/article/details/137553765

相关文章

  • 在Linux中,iptables和firewalld两种防火墙如何使用?
    在Linux中,iptables和firewalld是两种常用的防火墙工具,它们用于配置和管理系统的网络流量。它们都提供了对数据包的过滤、转发和网络地址转换(NAT)等功能。1.iptablesiptables是Linux内核的防火墙组件,它提供了一个命令行界面来设置数据包过滤规则。iptables使用表(tables)和链(chains......
  • Python递归调用应用实例-汉诺塔
    递归介绍1.简单的说:递归就是函数自己调用自己,每次调用时传入不同的值2.递归有助于编程者解决复杂问题,同时可以让代码变得简洁汉诺塔传说汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石住子,在一根柱子上从上往下按照大小顺......
  • linux的iptables被关闭
     产生告警原理:看告警请求包里是否执行了关闭防火墙命令serviceiptablesstop、chkconfigiptablesoff命令或者serviceiptablesstart、chkconfigiptableson命令  若有该告警可联系确认该资产是否正常执行或者是正常业务。 ......
  • Android 13.0 系统限制上网系列之iptables用IOemNetd实现删除子链功能的实现
    1.前言在13.0的系统rom定制化开发中,对于限制系统上网功能中,在system中netd网络这块的产品开发中,会要求设置屏蔽ip地址之内的功能,liunx中iptables命令也是比较重要的,接下来就来在IOemNetd这块实现删除创建子链的相关功能2. 系统限制上网系列之iptables用IOemNetd实现删除创......
  • PTA:7-116 点与圆的位置关系
    作者 zzz单位 重庆科技大学在平面直角坐标系中,给定一个圆的圆心坐标Ox,Oy以及半径R,再给定一个点的坐标Px,Py,请判断这个点与圆的位置关系。输入格式:先输入三个正整数,分别代表圆心的横纵坐标Ox,Oy和半径R。在输入两个正整数,分别代表给定点的横纵坐标Px,Py。输入的所有数......
  • PTA:7-115 计算星期值
    作者 周文俊单位 西南石油大学编程序实现:输入一个年份,求出这一年的1月1日是星期几,要求使用全中文形式(如“星期六”)输出,并限定不能使用循环结构。假定从公元第一天开始,就实施格里高利历法,并且公元1年1月1日为星期一。格里高利历法的置闰规则是400年97闰,也可以概括为:四闰百不......
  • PTA:7-117 求整数段和
    作者 杨起帆单位 浙大城市学院给定两个整数A和B,输出从A到B的所有整数以及这些数的和。输入格式:输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。输出格式:首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按S......
  • PTA:7-118 N个数求和
    作者 陈越单位 浙江大学本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。输入格式:输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1a2/b2...给出N个有理数。题目保证所有分子和分母都在长整......
  • PTA数据结构第四章7-2 变身(八进制转成十进制)
    分数20作者 陈晓梅单位 广东外语外贸大学题目给出一个由18位八进制数字组成的序列,要求每六位转成一个十进制数并输出。输入格式:18位八进制数字组成的序列。输出格式:输出转换后的三个十进制数,以空格分隔,行末不能有空格。输入样例:000023452230567134输出样例:......
  • pta 1013 数素数
    013数素数分数20全屏浏览切换布局作者 CHEN,Yue单位 浙江大学令 Pi​ 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM​ 到 PN​ 的所有素数。输入格式:输入在一行中给出 M 和 N,其间以空格分隔。输出格式:输出从 PM​ 到 PN​ 的所有素......