版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42449444/article/details/84726505
特别注意:请在你使用的计算机 D: 盘建立一个以你学号为名的文件夹,将考试提供的“程序设计输入文件”文件夹中的文件都拷贝至该文件夹备用。最后提交时,将你的学号文件夹中的所有内容打包为一个以你学号命名的压缩文件(.rar)格式,然后提交该文件。所有程序代码均需用注释说明求解原理或思路。
#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;
}