[C++]实验十一:通过定义一个循环链表类和Josephus类

本文介绍了一个基于约瑟夫环问题的C++实现案例,通过定义Josephus类并使用STL中的list来模拟约瑟夫环问题的过程。具体演示了如何设置10个小孩参与游戏,并从第二个小孩开始数数,每数到第四个就有一个小孩出列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "Josephus.h"

void main()
{
 Josephus JosephusTest(10); //设有10个小孩
 JosephusTest.Number(4,2);  //从第2个小孩开始,数到第4个人出列
}

 

#include <list>
#include <iostream>
using namespace std;

class Josephus{
public:
 Josephus(int);
 void Number(int,int);
private:
 list<int> Child;
};

Josephus::Josephus(int n)
{
 for (int i=1; i<=n; i++)
  Child.push_back(i);
}

inline void Josephus::Number(int m, int s)
{
 list<int>::iterator iter = Child.begin();
 //从S个同学开始
 cout << "带“*”的表示被出列同学的编号:" << endl;
 for (int i=1; i<s; i++)
  iter++;
 //开始数数,出列
 while (iter != Child.end())
 {
  for (int j=1; j<m; j++,iter++)
  {
   if (iter == Child.end())  j--;
   else cout << *iter <<" ";
  }
  if (iter == Child.end()) iter++;
  cout << "*" <<*iter << endl;
  iter = Child.erase(iter);
        if (iter == Child.end()) iter++;
 }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值