首页 > 其他分享 >南沙C信++奥赛陈老师解一本通题: 1205:汉诺塔问题

南沙C信++奥赛陈老师解一本通题: 1205:汉诺塔问题

时间:2024-09-09 13:03:30浏览次数:11  
标签:++ hanoi char 1205 int 汉诺塔 64 移动

【题目描述】

约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到中间的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。

这是一个著名的问题,几乎所有的教材上都有这个问题。由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面,所以64个盘的移动次数是:18,446,744,073,709,551,615

这是一个天文数字,若每一微秒可能计算(并不输出)一次移动,那么也需要几乎一百万年。我们仅能找出问题的解决方法并解决较小N值时的汉诺塔,但很难用计算机解决64层的汉诺塔。

假定圆盘从小到大编号为1, 2, ...

【输入】

输入为一个整数(小于20)后面跟三个单字符字符串。

整数为盘子的数目,后三个字符表示三个杆子的编号。

【输出】

输出每一步移动盘子的记录。一次移动一行。

每次移动的记录为例如 a->3->b 的形式,即把编号为3的盘子从a杆移至b杆。

【输入样例】

2 a b c

【输出样例】

a->1->c
a->2->b
c->1->b
#include <iostream>
using namespace std;
//a 起始杆 b 目标杆 c 中转杆 
void hanoi(int n,char a,char b,char c)
{
	if(n==1)
	{
		printf("%c->%d->%c\n",a,n,b);
		return;
	}
	hanoi(n-1,a,c,b);
	printf("%c->%d->%c\n",a,n,b);
	hanoi(n-1,c,b,a);
}
int main()
{
	int n;
	char a,b,c;
	cin>>n>>a>>b>>c;
	hanoi(n,a,b,c);
	return 0;
}

 

标签:++,hanoi,char,1205,int,汉诺塔,64,移动
From: https://www.cnblogs.com/nanshaquxinaosai/p/18404334

相关文章

  • C++期末复习超详细总结知识点(期末冲刺)
    指数形式(即浮点形式)1.5、字符型常量作用:字符型变量用于显示单个字符语法:charch='a';注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号注意2:单引号内只能有一个字符,不可以是字符串C和C++中字符型变量只占用1个字节。字符常量只能包括一个字符,如......
  • 揭秘 C++ List 容器背后的实现原理,带你构建自己的双向链表
    本篇博客,我们将详细讲解如何从头实现一个功能齐全且强大的C++List容器,并深入到各个细节。这篇博客将包括每一步的代码实现、解释以及扩展功能的探讨,目标是让初学者也能轻松理解。一、简介1.1、背景介绍在C++中,std::list是一个基于双向链表的容器,允许高效的插入和......
  • 如何实现标准库般强大的 C++ Vector?:从动态扩容到移动语义到迭代器全覆盖
    在C++中,std::vector是最常用的动态数组容器。它具有高效的内存管理、动态扩容、随机访问等特点。在这篇博客中,我们将从零开始,实现一个功能强大、灵活、并且具有高性能的Vector类,具备std::vector的大部分功能,包括动态扩容、迭代器、模板支持、随机访问等,尽可能模仿C+......
  • C++里面的iostream是什么东西?
    小弟不才,看了百度的介绍更乱了。。我刚接触c++,我感觉很有意思,今天看c++primer里面介绍过iostream。但是怎么看都不懂。代码里面也出现了#include<iostream>。我想请教一下,iostream是个库,可不可以理解成是一个仓库,里面装的都是C的代码?另外,IO是不是iostream的缩写? C++编译系统提......
  • C++学习笔记(曾经我看不懂的代码2:基于范围的for循环、auto使用、stl容器、template模
    不知不觉c++程序设计:标准库已经看了一大半了,学到了很多,很多曾经在网上和在书上看到却看不懂的代码,在看完标准库中的大半内容以后,都能大致的理清代码的含义。代码模板一:for(auto&a:arr)1、基于范围的for循环:a为迭代变量,arr为迭代范围,&表示引用。写一个例子:#include<ios......
  • C++ iostream、iomanip 头文件详解
    C++iostream、iomanip头文件详解首先,我们来看看iostream。相信大家都知道iostream,这个库可以说是最常用的几个库之一了。iostream库提供了输入输出流。比如cin、cout,都是在iostream里的。所以,我们经常会用到iostream这个库。iostream这个名字很好理解,InputOutputStream,输......
  • C/C++中extern函数使用详解
    extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定目录一、定义和声明的区别二、extern用法2.1extern函数2.2extern变量2.3在C++文件中调用C方式编译的函数三、通俗讲......
  • C++ 模板进阶知识——stdenable_if
    目录C++模板进阶知识——std::enable_if1.简介和背景基本语法使用场景2.`std::enable_if`的基本用法示例:限制函数模板只接受整数类型3.SFINAE和std::enable_if示例:使用SFINAE进行函数重载SFINAE的优点应用场景4.在类模板中使用std::enable_if示例:根据类型......
  • 南沙信奥赛C++陈老师解一本通题: 1326:【例7.5】 取余运算(mod)
    ​【题目描述】【输入】输入b,p,k的值。【输出】【输入样例】2109【输出样例】2^10mod9=7 #include<iostream>#include<stdlib.h>usingnamespacestd;longlongb,p,k,ans=1;intmain(){ cin>>b>>p>>k; for(inti=1;i<=p;i++) { ans*=b;......
  • [C++ Daily] 确保类复制了所有应该复制的成员
    确保类复制了所有应该复制的成员结果:源代码:#include<iostream>#include<string>#include<vector>/***copy操作应该包含对象内的所有成员变量及所有父类的成员变量,*此种可以通过调用对应的拷贝构造与拷贝赋值操作完成*////@briefsimpleterminalprint......