前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文件操作版汉诺塔类问题

文件操作版汉诺塔类问题

作者头像
喜欢ctrl的cxk
发布2019-11-08 16:15:07
4650
发布2019-11-08 16:15:07
举报
文章被收录于专栏:Don的成长史Don的成长史

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42449444/article/details/84726437

题目描述:

有A、B、C三个盘子用来盛饼,饼的个头有大有小,没有大小完全相同的,饼在盘子中必须大个的在下面,小个的放在上面。现在 A 盘中放着 n 张薄饼(n由文件input02.txt读入),需要借助 B 盘放在 C 盘中,请写出程序代码实现,并在程序中注释说明原理,最后结果请输出在output02.txt中。

特别注意:请在你使用的计算机 D: 盘建立一个以你学号为名的文件夹,将考试提供的“程序设计输入文件”文件夹中的文件都拷贝至该文件夹备用。最后提交时,将你的学号文件夹中的所有内容打包为一个以你学号命名的压缩文件(.rar)格式,然后提交该文件。所有程序代码均需用注释说明求解原理或思路。

解题思路:这个题说白了就是汉诺塔类问题,我觉得难点就在于直接在自定义函数中把结果输出到txt文件里面,要在函数中引用文件流对象。

我的代码:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
//看完题目之后,可以知道这是一个汉诺塔类问题
int Count = 0;   //用来记录移动薄饼的总次数
void move(fstream &myfile,char getone,char putone);
void hanoit(fstream &myfile,int n,char a,char b,char c);

int main()
{
    ifstream txtfile;      //建立输入文件流对象
    txtfile.open("d:\\代码\\20171101231\\input02.txt");
    fstream myfile;       //建立文件流
    myfile.open("d:\\代码\\20171101231\\output02.txt",ios::out|ios::trunc);
    //打开目标文件,ios::out表示写入文件操作,ios::trunc当文件存在时,清空文件内容
    int n;
    while(!txtfile.eof())    //eof()用来侦测是否读到文件尾,读到文件尾返回true
    {
        txtfile >> n;   //n张薄饼
    }
    hanoit(myfile,n,'A','B','C');
    myfile << "一共移动了" << Count << "次薄饼。" << endl;
    txtfile.close();  //拉完shi要记得擦PP
    myfile.close();  
    return 0;
}

void move(fstream &myfile,char getone,char putone)
{
    Count++;
    myfile << getone << "-->" << putone << endl;   //输出是从哪一个盘移动到了哪一个盘
}

void hanoit(fstream &myfile,int n,char a,char b,char c)
{
    if(n == 1)   //若只有一张薄饼,直接从A盘移动到C盘
    {
        move(myfile,a,c);
    }
    else
    {
        hanoit(myfile,n-1,a,c,b);
        move(myfile,a,c);
        hanoit(myfile,n-1,b,a,c);
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-12-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
    • 有A、B、C三个盘子用来盛饼,饼的个头有大有小,没有大小完全相同的,饼在盘子中必须大个的在下面,小个的放在上面。现在 A 盘中放着 n 张薄饼(n由文件input02.txt读入),需要借助 B 盘放在 C 盘中,请写出程序代码实现,并在程序中注释说明原理,最后结果请输出在output02.txt中。
      • 解题思路:这个题说白了就是汉诺塔类问题,我觉得难点就在于直接在自定义函数中把结果输出到txt文件里面,要在函数中引用文件流对象。
        • 我的代码:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档