4-b12(汉诺塔),要求给出移动过程中每根柱子上现有的圆盘数量及编号

news2024/12/23 12:25:53

【要求:】

1、假设圆盘最大数量为10,其余输入格式要求同前

2、要求打印初始状态下,起始圆柱拥有的圆盘数及每个圆盘的编号,在随后的每个移动步骤中,打印移动完成后每个圆柱的现有的圆盘数及编号(效果如下图)

3、从初始行开始,每行的具体输出格式要求(下图为10层的部分步骤)

【一些输出格式的细节要求:】

(1)步数宽度为4,右对齐,再多一个空格到“步”

(2)()内为当前移动的盘号,宽度为2,右对齐

(3)ABC柱内容打印时,每个数字间一个空格,ABC间宽度预留正好10个数字+空格

(4)所有空白均为空格,不是其他符号(例:“初始:”和“A”之间数多个空格)

(5)输出行数过多,可以用输出重定向方式进行检查

(6)打印时,每行必须完整地从左到右输出,不允许采用之前的gotoxy之类的函数改变光标位置,也不允许使用退格键

(7)如果屏幕宽度过小,不足以容纳一行,则需要调整cmd窗口的宽度(具体方法参考之前的文档)

4、要求使用递归方式完成,为了在各层递归中共用变量,本题允许使用全局变量,具体要求为两种方式,不准违规多使用全局变量

(1)用三个全局简单变量表示三个栈顶指针、三个全局一维数组来记录三根圆柱中的圆盘数及编号、一个计数用的全局变量

(2)用一个全局一维数组(大小为[3])、一个全局二维数组(大小为[3][10])来记录三根圆柱中的圆盘数及编号、一个计数用的全局变量

5、递归函数不允许使用循环

6、数组初始化、打印横向数组、处理输出错误等均允许增加自用函数且允许使用循环

参考代码

#include <bits/stdc++.h> //包含万能头文件
using namespace std;     //使用命名空间std
int total, id_a, id_b, id_c;
int asd_a[15], asd_b[15], asd_c[15];
void print()
{
    int kongge;
    cout << "A:";
    for(int i=1; i<=id_a; ++i){
        cout << right << setw(2) << asd_a[i];
    }
    kongge=id_a*2;
    for(int i=kongge+1; i<=21; ++i){
        cout << " ";
    }
    cout << "B:";
    for(int i=1; i<=id_b; ++i){
        cout << right << setw(2) << asd_b[i];
    }
    kongge=id_b*2;
    for(int i=kongge+1; i<=21; ++i){
        cout << " ";
    }
    cout << "C:";
    for(int i=1; i<=id_c; ++i){
        cout << right << setw(2) << asd_c[i];
    }
    cout << endl;
}
//nn阶的汉诺塔,从from移动到to上,temp是辅助
void hannuota(int nn, char from, char temp, char to)
{
    if(nn==1){
        total++;
        cout << "第" << right << setw(4) << total << " 步";
        if(from=='A'){
            cout << "(" << right << setw(2) << asd_a[id_a] << "): ";
        }
        else if(from=='B'){
            cout << "(" << right << setw(2) << asd_b[id_b] << "): ";
        }
        else if(from=='C'){
            cout << "(" << right << setw(2) << asd_c[id_c] << "): ";
        }
        cout << from << "-->" << to << " ";
        if(from=='A' && to=='B'){
            id_b++;
            asd_b[id_b]=asd_a[id_a];
            id_a--;
        }
        else if(from=='A' && to=='C'){
            id_c++;
            asd_c[id_c]=asd_a[id_a];
            id_a--;
        }
        else if(from=='B' && to=='A'){
            id_a++;
            asd_a[id_a]=asd_b[id_b];
            id_b--;
        }
        else if(from=='B' && to=='C'){
            id_c++;
            asd_c[id_c]=asd_b[id_b];
            id_b--;
        }
        else if(from=='C' && to=='A'){
            id_a++;
            asd_a[id_a]=asd_c[id_c];
            id_c--;
        }
        else if(from=='C' && to=='B'){
            id_b++;
            asd_b[id_b]=asd_c[id_c];
            id_c--;
        }
        print();
    }
    else{
        hannuota(nn-1, from, to, temp);
        hannuota(1, from, temp, to);
        hannuota(nn-1, temp, from, to);
    }
}
int main()  //定义一个主函数
{
    int n;
    char start, end, mid;
    cout << "请输入汉诺塔的层数(1-10):" << endl;
    cin >> n;
    cout << "请输入起始柱(A-C):" << endl;
    cin >> start;
    cout << "请输入目标柱(A-C):" << endl;
    cin >> end;
    if(start!='A' && end!='A'){
        mid='A';
    }
    else if(start!='B' && end!='B'){
        mid='B';
    }
    else{
        mid='C';
    }
    if(start=='A'){
        id_a=n;
        for(int i=1; i<=n; ++i){
            asd_a[i]=n-i+1;
        }
    }
    else if(start=='B'){
        id_b=n;
        for(int i=1; i<=n; ++i){
            asd_b[i]=n-i+1;
        }
    }
    else if(start=='C'){
        id_c=n;
        for(int i=1; i<=n; ++i){
            asd_c[i]=n-i+1;
        }
    }
    cout << "初始:                ";
    print();
    hannuota(n, start, mid, end);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1636843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的志愿者管理系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的志愿者管理系统3拥有三个角色&#xff1a; 管理员&#xff1a;用户管理、志愿组织管理、注册申请观看、活动管理、报名管理、打卡管理、公告管理等 用户&#xff1a;登录注册、…

C语言----函数

1.函数的概念 函数&#xff1a;founction c语言的程序代码都是函数组成的 c语言中的函数就是一个完成某项特定的任务的一段代码&#xff0c;这段代码有特殊的写法和调用方法 c语言中我们一般见到两种函数&#xff1a; .库函数 .自定义函数 2.库函数 有对应的头文件 #i…

咸鱼之王攻略:2024强阵容搭配

欢迎来到《咸鱼之王》的世界&#xff01;作为一款集合了策略与角色扮演元素的游戏&#xff0c;本攻略将为您提供一系列关于游戏阵容搭配和咸将选择的建议&#xff0c;帮助您在游戏中更好地获得胜利。 1.了解游戏阵营 《咸鱼之王》分为四个阵营&#xff1a;魏、蜀、吴、群。每个…

什么是 Web3 的生成式 AI?

从 Web 1.0 的静态、单向通信到 Web 2.0 的动态、用户驱动的格局&#xff0c;互联网在二十年的时间里经历了一场显着的转变。现在&#xff0c;当我们站在 Web 3.0 时代的边缘时&#xff0c;我们正在见证更具颠覆性的事物的曙光&#xff1a;生成式人工智能 (AI) 融入我们的数字世…

anything-llm的嵌入式聊天小部件

anything-llm 详情移步到官方: https://github.com/Mintplex-Labs/anything-llm anything-llm可以docker启动和本地启动 例如&#xff1a;docker 启动&#xff0c; 自行去安装docker哈 cd 到docker文件夹下&#xff0c; 窗口运行&#xff1a; docker-compose up -d --build运…

数据库基础--MySQL简介以及基础MySQL操作

数据库概述 数据库&#xff08;DATABASE&#xff0c;简称DB&#xff09; 定义:是按照数据结构来组织、存储和管理数据的仓库.保存有组织的数据的容器(通常是一个文件或一组文件) 数据库管理系统(Database Management System,简称DBMS) 专门用于管理数据库的计算机系统软件;…

[1671]jsp教材管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教材管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

IP-guard WebServer 2024年两个漏洞简单分析

前言 这个漏洞看完索然无味&#xff0c;但是手上又刚好有源码&#xff0c;不看他一下又觉得可惜 权限绕过漏洞(QVD-2024-14103)简单分析 网上冲浪的时候&#xff0c;看到个买不起的CSDN专栏 这里基本上定位到是_mApplyList 出了问题&#xff0c;前面两个是ipguard webserve…

Flutter笔记:Widgets Easier组件库(4)使用按钮组

Flutter笔记 Widgets Easier组件库&#xff08;4&#xff09;&#xff1a;使用按钮组 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress…

2024五一数学建模C题保姆级分析完整思路+代码+数据教学

2024五一数学建模竞赛&#xff08;五一赛&#xff09;C题保姆级分析完整思路代码数据教学 煤炭是中国的主要能源和重要的工业原料。然而&#xff0c;随着开采深度的增加&#xff0c;地应力增大&#xff0c;井下煤岩动力灾害风险越来越大&#xff0c;严重影响着煤矿的安全高效开…

机器学习实战 —— 工业蒸汽量预测(二)

目录 文章描述背景描述数据说明数据来源实战内容2.数据特征工程2.1数据预处理和特征处理2.1.1 异常值分析2.1.2 归一化处理2.1.3 特征相关性 2.2 特征降维2.2.1 相关性初筛2.2.2 多重共线性分析2.2.3 PCA处理降维 文章描述 数据分析&#xff1a;查看变量间相关性以及找出关键变…

2024年第二十六届“华东杯”(A题)大学生数学建模挑战赛|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看华东杯 (A题&#xff09;&#xff01; 问题一&a…

数组模拟双链表-java

通过数组来模拟双链表&#xff0c;并执行一些插入和删除的功能。 目录 一、问题描述 二、模拟思路 1.变量解释 2.数组初始化 3.在下标是k的结点后面插入一个结点 4.删除下标为k的结点 5.基本功能解释 三、代码如下 1.代码如下&#xff1a; 2.读入数据&#xff1a; 3…

VSCode 配置 CMake

VSCode 配置 C/C 环境的详细过程可参考&#xff1a;VSCode 配置 C/C 环境 1 配置C/C编译环境 方案一 如果是在Windows&#xff0c;需要安装 MingW&#xff0c;可以去官网(https://sourceforge.net/projects/mingw-w64/)下载安装包。 注意安装路径不要出现中文。 打开 windows…

【LocalAI】(10):在autodl上编译embeddings.cpp项目,转换bge-base-zh-v1.5模型成ggml格式,本地运行main成功

1&#xff0c;关于 localai LocalAI 是一个用于本地推理的&#xff0c;与 OpenAI API 规范兼容的 REST API。 它允许您在本地使用消费级硬件运行 LLM&#xff08;不仅如此&#xff09;&#xff0c;支持与 ggml 格式兼容的多个模型系列。支持CPU硬件/GPU硬件。 【LocalAI】&…

【算法小白周赛1A】分析 - 题解与代码

题目链接&#xff1a;https://www.starrycoding.com/problem/155 题目描述 小可可最近在学数学运算&#xff01;他希望考考你&#xff0c;给你两个整数 A , B A,B A,B&#xff0c;询问 A B A\times B AB 是否是偶数。 注意&#xff0c;可能存在前导 0 0 0&#xff0c;比如…

【C++】:日期类的实现 -- 日期计算器

前言 1.日期类是一种十分经典的类型。对于C的初学者&#xff0c;它能够帮助我们融会贯通许多C的基础知识&#xff0c;它涉及许多的基础语法&#xff0c;比如引用&#xff0c;函数重载&#xff0c;传值/传参返回&#xff0c;构造函数&#xff0c;运算符重载&#xff0c;const成…

Python 与 TensorFlow2 生成式 AI(五)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十二章&#xff1a;用生成式人工智能玩视频游戏&#xff1a;GAIL 在之前的章节中&#xff0c;我们已经看到如何使用生成式人工智能来生成…

如何在Linux上安装Python?2024Python安装教程

在Linux上安装Python并不难&#xff0c;对于Ubuntu或Debian系统&#xff0c;使用命令sudo apt install python3&#xff1b;对于CentOS、Red Hat或Fedora系统&#xff0c;使用命令sudo yum install python3。 如何在Linux上安装Python&#xff1f; 确切的安装步骤有所不同&am…

Django后台项目开发实战七

为后台管理系统换风格 第七阶段 安装皮肤包 pip install django-grappelli 在 setting.py 注册 INSTALLED_APPS [grappelli,django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.stat…