前不久拿到一套九连环,在解开过程中发现就是一个不断递归的过程,而经过抽象后,发现九连环可以理解成简化的横置版汉诺塔。递归的计算,计算机可是比人快多了,那么计算机怎么实现?

这段小代码不仅限于九连环,所以自称类九连环。代码如下。

#include <iostream>
using namespace std;void LoopDown ( int num ) ;void CircleDown ( int num ) ;void LoopUp ( int num ) ;void CircleUp ( int num ) ;int count = 0 ;
/*****前num个环退下*****/
void LoopDown ( int num )
{if ( num == 2 ) {CircleDown ( 2 );CircleDown ( 1 ) ;return ;}if ( num == 1 ) {CircleDown ( 1 ) ;return ;}LoopDown ( num - 2 ) ;CircleDown ( num ) ;LoopUp ( num - 2 ) ;LoopDown ( num - 1 ) ;
}
/*****第num个环退下*****/
void CircleDown ( int num )
{cout << num << " ↓ " ;count ++ ;if ( ! ( count % 15 ) ) cout << "\n" << endl;
}
/*****前num个环装上*****/
void LoopUp ( int num )
{if ( num == 2 ) {CircleUp ( 1 ) ;CircleUp ( 2 ) ;return ;}if ( num == 1 ) {CircleUp ( 1 ) ;return ;}LoopUp ( num - 1 ) ;LoopDown ( num - 2 ) ;CircleUp ( num ) ;LoopUp ( num - 2 ) ;
}
/*****第num个环装上*****/
void CircleUp ( int num )
{cout << num << " ↑ " ;count ++ ;if ( ! ( count % 15 ) ) cout << "\n" << endl;
}
void main ()
{cout << "这是类九连环游戏解法简单演示程序" << endl ;while ( 1 ) {cout << "请输入游戏中圆环的个数:" << endl ;float num ;//防止用户输入非整数,加强程序健壮性。while ( 1 ) {cin >> num ;num = num / 1 ;//将输入数据改为整型。if ( num > 0 ) break ;cout << "输入数据有误,圆环数必须是大于零的整数!" << endl ;}     count = 0 ;cout << "本解法将圆环编号,有手柄末端起始编号为1,\n手柄手持端最近圆环为最大编号。" << endl ;cout << "下面展示类九连环游戏" << num << "个圆环时的解法步骤:" << endl ;LoopDown ( num ) ;cout << "\n共" << count << "步。" << endl ;cout << " 退出请输入0。任意数字重新开始。 " << endl ;num = 0 ;cin >> num ;if ( !num ) break;}
}

程序运行图:

以上百行代码,自娱自乐。又要周末了,消遣一下。

转载于:https://www.cnblogs.com/suanec/p/3912161.html

九连环解法( 基于递归 )相关推荐

  1. python程序实例电话本-Python基于递归实现电话号码映射功能示例

    本文实例讲述了Python基于递归实现电话号码映射功能.分享给大家供大家参考,具体如下: 问题 电话按键上面的每个数字都对应着几个字母,如果按下一个数字键代表输入一个字母,那么输入一个数字组成的字符串 ...

  2. 论文解读 | 基于递归联合注意力的句子匹配模型

    在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...

  3. 论文浅尝 | 一种基于递归超图的知识图谱问答方法

    笔记整理 | 谭亦鸣,东南大学博士生 来源:EACL'21 链接:https://www.aclweb.org/anthology/2021.eacl-main.35.pdf 概述与动机 本文提出了一 ...

  4. Python版基于递归的冒泡排序算法

    应读者要求,写个基于递归的冒泡排序算法代码,之前发过的排序算法代码请参考Python版快速排序算法,Python版选择排序算法,Python版冒泡法排序算法. from random import r ...

  5. 基于递归的前序二叉树遍历实现

    class BtreeNote():def __init__(self,data=None,left=None,right=None):self.data =dataself.left=leftsel ...

  6. 基于递归神经网络的人脸识别探究

    摘要 本文首先简介了人工神经网络的发展史,继而介绍了递归神经网络的理论以及百度在基于递归神经网络的应用研究,最后探讨了递归神经网络在人脸识别中的应用. 1.    人工神经网络发展史[1][2] 人工 ...

  7. 基于递归神经网络的跌倒检测系统

     项目下载: https://download.csdn.net/download/babyai996/87544088https://download.csdn.net/download/babya ...

  8. R语言基于递归特征消除RFE(Recursive Feature Elimination)进行特征筛选(feature selection)

    R语言基于递归特征消除RFE(Recursive Feature Elimination)进行特征筛选(feature selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可 ...

  9. 九连环解法java版

    之前想写写试试,只写了个开头,最近补完了,试了下跑的还正常. 功能上能指定各个环是否在杆上,可以按拆卸或安装打印解的步骤. 方法两种,都用到了递归,递归的都是为了处理的n个环,需要前n-2个环不在杆, ...

最新文章

  1. python好学吗mooc中文网-用Python玩转数据
  2. 转化百分比_小秘诀教你如何快速提升大众点评访客转化率!
  3. java mvc 实际分层_SpringMVC体系分层模式原理图解
  4. We will be discontinuing the Nitrous Development Platform and Cloud IDE on November 14th, 2016.
  5. 文献记录(part42)--An end-to-end framework for unconstrained monocular 3D hand pose estimation
  6. 机械动作时序图怎么画_人物动作怎么画?动漫绘画人物姿势的基本画法!
  7. 国庆假期程序员是这样给自己粉饰无限的逼格!
  8. window7 安装grldr
  9. C++“打鱼晒网”问题
  10. 如何用 Python 和 Pandas 分析犯罪记录开放数据?
  11. ectouch手机版去除微信登录
  12. 网站建设和网站运营,网站如何进行宣传推广
  13. 计算机中f4的应用,电脑键盘中功能区的F2键F4键如何使用 电脑键盘中功能区的F2键F4键怎么使用...
  14. 一文看尽SOTA生成式模型:9大类别21个模型全回顾!
  15. Windows系统下载SRA数据,使用sratoolkit工具
  16. 支持用户将文件从一台计算机,2016年职称计算机考试WindowsXP冲刺试题(5)
  17. Shiro教程(七)Shiro Session共享配置以及实现
  18. thinkphp开发的erp系统旗舰版,模块齐全,功能强大
  19. Linux安装omnet++
  20. win10系统正在锁定计算机,怎样一息屏电脑就上锁win10

热门文章

  1. Scanvenger游戏制作笔记(三)Unity3D创建对墙体的攻击
  2. vue3+vant开发微信公众号网页爬坑不完全指北
  3. 自动驾驶(十一)---------泰勒展开式、雅克比矩阵、主成分分析
  4. 信息系统项目管理师:信息、信息化、信息系统、信息系统开发方法
  5. 面试官:Spring 用了哪些设计模式?说三种即可 = =
  6. 共线性诊断 matlab,求共线性诊断结果的含义
  7. Error. Flash Download failed - Target DLL has been cancelled
  8. IntelliJ IDEA 文件未被识别成maven工程
  9. 金融科技上市公司业绩爆发,三大业务趋势显现
  10. UE4学习笔记-材质篇(一)UV动画制作