正题


大意

将汉诺塔的规则改为只能移动到相邻的柱子,然后求有n个圆盘时在第m步时每个盘所在的位置。


解题思路

我们先将3个盘的移动情况推出来:(1,1,1)->(2,1,1)->(3,1,1)->(3,2,1)->(2,2,1)->(1,2,1)->(1,3,1)->(2,3,1)->(3,3,1)->(3,3,2)->(2,3,2)->(1,3,2)->(1,2,2)->(2,2,2)->(3,2,2)->(3,1,2)->(2,1,2)->(1,1,2)->(1,1,3)->(2,1,3)->(3,1,3)->(3,2,3)->(2,2,3)->(1,2,3)->(1,3,3)->(2,3,3)->(3,3,3)->(3,3,3)
我们会发现第一个盘有循环节(1,2,3,3,2,1),而第二个盘有每个长度为3的(1,2,3,3,2,1),而第3个盘有长度为9的(1,2,3)。那么我们其实可以发现每个盘都有循环节(1,2,3,3,2,1),然后第i个盘每3i−13i−13^{i-1}轮进行一次变化。
这个方法也有正确性:因为我们看第一个盘,他必须在第3个盘时第2个盘才可以移动到第2个盘,而当第一个盘回到第1个盘时,第2个盘才可以向第3个盘移动,而第iii个盘和第i+1" role="presentation" style="position: relative;">i+1i+1i+1个盘的关系也是一样的。


代码

#include<cstdio>
#include<cstring>
using namespace std;
const char mj[6]={'1','2','3','3','2','1'};//循环节
int t,n,m;
int main()
{scanf("%d",&t);for (int ti=1;ti<=t;ti++){scanf("%d%d",&n,&m);for (int i=1;i<=n;i++){putchar(mj[m%6]);//输出putchar(' ');m/=3;//加长变化时间}puts("");}
}

jzoj2136-(GDKOI2004)汉诺塔【找规律,模拟】相关推荐

  1. 汉诺塔游戏规律,让汉诺塔沦为体力劳动!(后附汉诺塔解法Python源码)

    记住这个规律,以后玩汉诺塔基本上就是体力劳动了. 规律: 先小后大,单左双右,循环. 设3个柱子分别是甲,乙,丙,把3根柱子看成一个循环,也就是说,甲的右边是乙,乙的右边是丙,而丙的右边则回到甲,同理 ...

  2. (C语言)汉诺塔与受限汉诺塔

    如果了解递归的话,看注释应该是能明白的.建议复制代码跑一下程序,从汉诺塔盘子只有1个和2个开始分析,那么很快能分析出递归的逻辑的. #define _CRT_SECURE_NO_WARNINGS 1 ...

  3. 汉诺塔问题详细解析zufeoj

    汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘 ...

  4. 汉诺塔III 汉诺塔IV 汉诺塔V

    汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  5. 2018年全国多校算法寒假训练营练习比赛(第一场)D. N阶汉诺塔变形(找规律)

    链接:https://www.nowcoder.com/acm/contest/67/D 来源:牛客网 题目描述 相信大家都知道汉诺塔问题.那么现在对汉诺塔问题做一些限制,成为一个新的玩法. 在一个底 ...

  6. 汉诺塔问题——“分步和”的规律(一种全新的理解)

    汉诺塔是一个经典问题,相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置n个金盘.游戏的目标:把A杆上 ...

  7. 汉诺塔VII(递推,模拟)

    汉诺塔VII Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  8. 227 用栈模拟汉诺塔问题

    原题网址:https://www.lintcode.com/problem/mock-hanoi-tower-by-stacks/description 描述 在经典的汉诺塔问题中,有 3 个塔和 N ...

  9. 汉诺塔html5游戏代码,用html5模拟的汉诺塔

    今天学习html5拖动的时候突然想到可以用html5来模拟个汉诺塔,说做就做.以下是我的实现,比较简单勿喷,不过欢迎指正和探讨 .container{border:solid 1px black;wi ...

最新文章

  1. 约瑟夫问题(优化优化再优化)
  2. springboot+mybatis+sqlserver导出数据库数据并实现下载到excel
  3. python安装库-python 安装库
  4. python update()
  5. linux可执行文件格式
  6. oracle 安装找不到服务,win7 下安装oracle 11g出现错误: 启动服务出现错误 找不到服务OracleMTSRecoveryService...
  7. 算法 --- 二叉树查找树的先序(中序、后序)遍历的js实现
  8. cordova+vue 项目打包成Android(apk)应用
  9. 利用jquery load 局部刷新数据
  10. Python 检测系统时间,k8s版本,redis集群,etcd,mysql,ceph,kafka
  11. Retrofit的讲解和使用
  12. 网关转发其他微服务后头信息拿不到_微服务之基于Zuul自研服务网关
  13. 如何写出优秀的开源简历
  14. oracle PS/SQL DEVELOPER
  15. .net 获取邮箱邮件列表和内容
  16. ajax 上传文件实例,Ajax 之文件上传
  17. 【通达信指标公式】多空分时幅图指标,股票期货T+0经典分时指标
  18. aspUpload有组件上传文件
  19. 给俺的女神翠花发邮件告白,我学会了这些网络基础知识
  20. python在地图上标注点_只要两步,用Python将地址标记在地图上!

热门文章

  1. linux改环境语言,linux下改变语言环境
  2. java get image获取根路径_Java 获取资源文件路径
  3. levedb 导入 mysql_LevelDB-初始篇
  4. mysql非安装_mysql 非安装版的配置
  5. php 4位数字不足补零,php实现数字不足补0的方法
  6. 34. 在排序数组中查找元素的第一个和最后一个位置012(二分查找+思路+详解+两种方法)Come Baby!!!!!!!! !
  7. vector容器中清空元素(但原来的元素还在)
  8. [Java基础]字节流写数据
  9. 蓝桥杯2014届试题9题 小朋友排队(树状数组+类逆序对)
  10. 蜘蛛牌 HDU - 1584(搜索——达到先让某些段先结合,达最优解)