【HDU 1997】汉诺塔VII
汉诺塔VII(题目链接)
思路
本文参考了下列文章
- 汉诺塔的回顾和深刻 汉诺塔VII
首先用数组将每一个样例的状态存储
- 数组的每一行存储一个柱子的状态
- 每一行的第0列存储柱子上盘子的数目
- 其后从下到上存储柱子对应位置上的盘子的编号
使用函数根据在移动盘子的过程中的规律判断
- 当盘子的数目为奇数时,在移动过程中,第奇数个柱子的最低位置上的盘子编号为奇数
- 当盘子的数目为偶数时,则相反
- 并且每一个柱子上的盘子的编号必定交替出现
代码
#include <iostream>
using namespace std;//存储输入的状态,tab[i][0]表示第i个柱子上的盘子数目,后面依次为盘子的编号
int tab[3][65];//判断tab中的状态是不是移动n个盘子时的中间状态
int f(int n){ //输入为盘子的数目 for(int i = 0; i < 3; ++i){ //分别判断三个柱子 if(0 == tab[i][0]){ //若该柱子没有盘子 continue; //直接判断下一个柱子 }//奇数个盘子时在第奇数个柱子的最下面的盘子的编号为奇数,偶数相反 if((n+i) % 2 != tab[i][1] % 2){ //若不相同 return 0; //直接返回false }//每个柱子上的盘子编号应该是奇偶数交替 for(int j = 2; j <= tab[i][0]; ++j){ //循环柱子上的每一个盘子 if((tab[i][j-1]+tab[i][j]) % 2 == 0){ //若编号不是交替 return 0; //直接返回false }} }return 1; //条件满足,返回true
}int main(){int t, n; //定义变量 cin >> t; //输入样例数 while(t--){ //循环t次 cin >> n; //输入盘子数目//输入柱子上的盘子状态 for(int i = 0; i < 3; ++i){ //循环 cin >> tab[i][0]; //输入柱子上盘子数目 for(int j = 1; j <= tab[i][0]; ++j){ //循环 cin >> tab[i][j]; //输入柱子上的盘子编号}}if(f(n)){ //若返回为 1 cout << "true" << endl; //输出true }else{ //否则 cout << "false" << endl; //输出false }}return 0;
}
总结
当看到题目时,基本的模拟做出来了之后,应该仔细思考看看有没有什么规律
【HDU 1997】汉诺塔VII相关推荐
- HDU 1997 汉诺塔VII
汉诺塔VII Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem D ...
- 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI、汉诺塔VII
汉诺塔II:(hdu1207) /先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上, 规则小的必需放在大的上面,每次搬一个,求最小步数.这个问题简单,DP: ...
- 汉诺塔VII(递推,模拟)
汉诺塔VII Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- HDU——2064汉诺塔III
汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 2064:汉诺塔III
汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- hdu 2064汉诺塔III 递推
汉诺塔递推题,比汉诺塔多了一个限制条件,盘子只允许在相邻的柱子之间移动. 分析: 第1步:初始状态: 第2步:把上面的n-1个盘移到第3号杆上: 第3步:把第n个盘从1移到2: 第4步:把前n-1个从 ...
- HDU 1207 汉诺塔II (递推)
经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘.上 ...
- hdu 1207 汉诺塔II (四柱汉诺塔)
思路是借鉴网上一大牛的,写的很完美了,所以一句没改,代码是自己敲的,C语言版 变体汉诺塔 问题描述:在经典汉诺塔的基础上加一个条件,即,如果再加一根柱子(即现在有四根柱子a,b,c,d),计算将n个盘 ...
- 杭电_ACM_汉诺塔VII
Problem Description n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列.由于发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上, ...
最新文章
- 2016_6_27日报
- Git 提交代码 简单步骤
- 科研工作者一般怎么找文献?
- BZOJ2212——线段树合并
- 两个excel文档查找相同选项后替换_看似普通的查找和替换功能,用好了,能让你的工作效率翻一番...
- 大数据是企业未来最重要的资源
- 珠江三角洲 芯片恩仇录
- wps java转换成doc_WPS能转PDF吗?WPS转换不能错过的一款软件!
- ora-04098 触发器无效且未通过重新验证
- maven 项目在 tomcat 中启动报错:Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)...
- CCIE试验备考之交换VLAN间路由
- txtv28pw河南某中学_有一种寒冷叫不穿秋裤!河南一中学班主任让学生列队挨个检查秋裤...
- 微信公众号跳转H5页面-用户授权-返回openId以及access_token
- Tout= ((arr+1)*(psc+1))/Tclk公式理解汇总
- vs2017 项目开发 解决方案下的多个项目
- android 实现果冻动画效果,手把手教你绘制Android粘性果冻动画组件
- 建服务器数据中心,如何构建一个服务器数据中心
- mixpanel实验教程(2) 支持你啊
- office卸载工具怎么用(官方干净卸载方法)
- 新浪微博2012校招笔试题