测试请点击此处

题目描述:
在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。

现在我们把三根针编号为1,2,3。
所有的金片在初始时都在1号针上,现在给你的任务是判断一系列的指令过程中,是否会出现非法的指令。
而非法指令有以下两种情况:
1、某个针上已经没有金片了,但是指令依然要求从该处移动金片到其它针上。
2、把一个大的金片移动到了小的金片上。
输入描述:
第一行输入一个整数N表示测试数据的组数(N<10)
每组测试数据的第一行有两个整数P,Q(1<P<64,1<Q<100),分别表示汉诺塔的层数与随后指令的条数
随后的Q行,每行都输入两个整数a,b,(1<=a,b<=3)表示一条指令。
指令1 2表示把1号针最上面的金片移动到2号针最上面。
数据保证a,b不会相同。
输出描述:
如果存在非法指令,请输出illegal
不存在非法指令则输出legal
样例输入:
3
2 1
1 2
3 3
1 2
1 3
3 2
2 1
2 1
样例输出:
legal
illegal
illegal
解题思路

//该题可利用栈的先进后出的性质来进行处理解决
用到的头文件和函数如下:
<stack>//包含栈的各种操作函数
stack<int> s;//创建stack对象
s.push(n);//元素n入栈
s.pop();//栈顶元素出栈
s.top();//访问栈顶元素
s.empty();//判断栈是否为空
s.size();//返回栈中元素个数

解题代码

//该题可利用栈的先进后出的性质来进行处理解决
#include<iostream>
#include<stack>//定义栈的头文件
using namespace std;
void deal()
{stack<int> needle[4];//定义栈 int a,b;int p,q,i;bool is=true;//is标识栈是否为空 cin>>p>>q;for(i=p;i>0;i--)//对标号为1的栈进行初始化 needle[1].push(i);for(i=0;i<q;i++)//对q次操作进行分析判断 {cin>>a>>b;if(needle[a].empty())//如果栈a为空,那么此次操作必定错误 is=false;else{if(needle[b].empty())//如果栈b为空,那么操作一定可进行 {needle[b].push(needle[a].top());needle[a].pop();}else{if(needle[a].top()>needle[b].top())//判断a的栈顶元素是否比b的大,若大则操作错误 is=false;else{needle[b].push(needle[a].top());needle[a].pop();}}}}if(is)//对最终结果进行输出 cout<<"legal"<<endl;elsecout<<"illegal"<<endl;
}
int main()
{int n;cin>>n;while(n--)deal();return 0;
}

南阳oj-----汉诺塔(三)(stack)相关推荐

  1. 第12周 oj 汉诺塔问题

    问题及代码: /*Copyright(c)2016,烟台大学计算机学院 all rights reserved. 作者:曹欣宇 完成日期:2016年11月18日 题目描述 汉诺塔(又称河内塔)问题是印 ...

  2. python面向过程实践汉诺塔_递归汉诺塔-和递归汉诺塔相关的内容-阿里云开发者社区...

    多柱汉诺塔最优算法设计探究 多柱汉诺塔最优算法设计探究 引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因 ...

  3. 汉诺塔_最优通解(待证)_碟子移动步骤

    汉诺塔 三柱以上一般解,"Frame-Stewart Algorithm" 证明在四柱情况下最优,往上未证,当下来说应该没有更优解了. Java/Python 代码传送门 三柱经典 ...

  4. 多柱汉诺塔最优算法设计探究

    多柱汉诺塔最优算法设计探究   引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因此多柱汉诺塔的柱子个数M ...

  5. java汉诺塔(含汉诺塔问题的详解)

    目录 一:汉诺塔问题 二:汉诺塔问题思路 三:图示化思路 四:代码展示 一:汉诺塔问题 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的 ...

  6. 汉诺塔原理超详细讲解+变式例题

    目录 一.汉诺塔详解 1.详解 2.完整代码 二.汉诺塔公式:ans=2^n^-1 1.例题:P1760 通天之汉诺塔 三.变式1:牛牛的汉诺塔 四.变式2:P4285 [SHOI2008]汉诺塔 A ...

  7. 汉诺塔(三) 判断操作是否合法 + 栈(stack)数组

    题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=93 汉诺塔(三) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 ...

  8. 汉诺塔(三)_栈的应用

    问题 E: 汉诺塔(三) 时间限制: 3 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交][状态][讨论版] 题目描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北 ...

  9. NYIST汉诺塔(一)(三)问题以及汉诺塔的路径实现

    首先,什么是汉诺塔?如题,简单的介绍一下:在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地 ...

  10. 三十三、分治算法---汉诺塔问题

    一.分治算法的介绍 分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或 相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以 ...

最新文章

  1. flask的客户端服务端
  2. 企业部署Windows 8 Store 风格应用
  3. linux unshare 命令,Linux ip netns 命令
  4. 解决安装完ubuntu登陆无root账户问题
  5. 2019中山大学程序设计竞赛
  6. redhat 6.4 安装ftp
  7. vscode放大缩小快捷键_浏览器使用指南之常用快捷键有哪些?
  8. Extjs可视化设计视频教程三
  9. 解析HttpURLConnection与代理服务器
  10. Retinex实验效果图和图片格式转化的失真问题
  11. UE4蓝图基础01-开发环境安装
  12. 触摸板不小心卸载,触摸板重装,触摸板没有开关选项
  13. Google SketchUp Cookbook: (Chapter 1) Making Multiple Copies
  14. dell服务器更换硬盘raid,DELL T620服务器硬盘坏,更换硬盘做RAID同步
  15. 智能制造学习纪录片和书籍
  16. python画带权重的图
  17. 胡喜:蚂蚁金服十五年技术架构演进之路
  18. 2019年最新《Web 前端开发》等级考试模拟题~以国家 “1+X” 职业技能证书为标准,厚溥推出 Web 前端开发人才培养方案...
  19. JAVA使用POI-TL生成word表格列宽自定义
  20. 【说一千道一万】Java内存

热门文章

  1. 饿了么分布式KV架构与实践
  2. 全球首列氢燃料混合动力有轨电车成功商业运营,全程“无网”运行
  3. Linux系统编程之进程间通信
  4. REST+EJB+JPA 框架在 Eclipse+TomEE 的开发环境搭建
  5. [翻译] 5点建议,让iOS程序跑得更快
  6. TextView 不用获取焦点也能实现跑马灯
  7. 【SpringBoot_ANNOTATIONS】组件注册 06 @Conditional 按照条件注册bean
  8. 【Hibernate】ch01Demo
  9. SpringBoot 根据条件注入需要的 Bean
  10. mongodb python 大于_菜鸟成长记--如何根据关键词爬取微博内容?(scrapy+mongodb)