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

文件操作版约瑟夫环类问题

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

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

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

题目描述:

本题目保存的源文件名应为:prog03.cpp 或 prog03.c 或 prog03.py (按使用编程工具确定),该文件应该保存在你的学号文件夹中用于提交。

n 个人围成一圈,从第一个人开始顺序编号为1到n。从第1个人从1开始报数,数到3的人出圈。再由下一个人从1开始报数,数到3的人出圈,如此循环数下去,直到最后一个人出圈。编写程序实现,n的值程序从 in03.txt中读取,请将出圈人的编号按出圈顺序写入 out03.txt 中,输出的编号用英文逗号分割。

例如,n为8,则 out3.txt中输出的数据应该为:3,6,1,5,2,8,4,7 。

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

解题思路:这个题说白了就是简化了的约瑟夫环类问题,文件提交形式的考试不会出现TLE,于是我用的递归法。

我的代码:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
//约瑟夫环问题
int Joseph(int sum,int count,int n)
{
    if(n==1)
    {
        return (sum+count-1)%sum;
    }
    else
    {
        return (Joseph(sum-1,count,n-1)+count)%sum;
    }
}

int main()
{
    ifstream txtfile;   //建立输入文件流对象
    txtfile.open("d:\\代码\\20171101231\\in03.txt");
    fstream myfile;    //建立文件流
    myfile.open("d:\\代码\\20171101231\\out03.txt",ios::out|ios::trunc);
    //打开目标文件,ios::out表示写入文件操作,ios::trunc当文件存在时,清空文件内容
    int sum=0,count=3,alive=1; //数到3出圈,所以count=3,存活人数为1
    //读入总人数
    txtfile >> sum;
    // 约瑟夫环递归解法
    bool flag = true;   //为了输出格式而立的flag
    for(int i=1;i<=sum;i++)
    {
        if(flag)
        {
            myfile << Joseph(sum,count,i)+1;
            flag = false;
        }
        else
        {
            myfile << "," << Joseph(sum,count,i)+1;
        }

    }
    txtfile.close();  //拉完shi要记得擦PP
    myfile.close();   
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-12-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
    • 本题目保存的源文件名应为:prog03.cpp 或 prog03.c 或 prog03.py (按使用编程工具确定),该文件应该保存在你的学号文件夹中用于提交。
      • n 个人围成一圈,从第一个人开始顺序编号为1到n。从第1个人从1开始报数,数到3的人出圈。再由下一个人从1开始报数,数到3的人出圈,如此循环数下去,直到最后一个人出圈。编写程序实现,n的值程序从 in03.txt中读取,请将出圈人的编号按出圈顺序写入 out03.txt 中,输出的编号用英文逗号分割。
        • 例如,n为8,则 out3.txt中输出的数据应该为:3,6,1,5,2,8,4,7 。
          • 解题思路:这个题说白了就是简化了的约瑟夫环类问题,文件提交形式的考试不会出现TLE,于是我用的递归法。
            • 我的代码:
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档