算法题,c++,动态规划,基于stl容器vector进行约瑟夫环的实现和复用

算法题,c++,动态规划,基于stl容器vector进行约瑟夫环的实现和复用

一、审题:
约瑟夫环,一共m个人围成一圈,从第一个开始数1,数到n的出圈,输出剩余n-1个人的原有编号。

例子:
50个人围一圈,从第一个开始数1,数到3的出圈,输出剩余2个人的原有编号。

二、代码结构:
1、使用类封装约瑟夫游戏,对外只暴露Game函数,用于调用约瑟夫游戏。
2、维护容器vector和约瑟夫3个功能函数,1个逻辑函数,这些组合在一起作为约瑟夫游戏的完整系统。

三、功能函数和逻辑函数组成的完整系统

1、组合成环
这个函数用于提供一个数量适合的约瑟夫环,并且保证每次提供的约瑟夫环时全新的,去除了“上一次游戏痕迹”的环,这要求对容器的内容做好处理。

void JohnslefCircle::GetCirclre(const int& num)
{
   
	if (num > 0)
	{
   
		//有内容
		if (m_VecData.size() != 0)
		{
   
			//去除内容
			m_VecData.clear();

			//去除容量
			vector<int>(m_VecData).swap(m_VecData);
		}

		//申请容量
		m_VecData.reserve(num);

		//初始化每一个位置的值
		for (int i = 0; i < num; ++i)
		{
   
			m_VecData.push_back(i + 1);
		}
	}
}

2、筛选出圈

//开始游戏,每out-1个人去掉一个人
void JohnslefCircle::Out(const int& out)
{
   
	if (m_VecData.size() < out)
	{
   
		return;
	}
	int aLive = m_VecData.size();
	int count = 0;
	vector<int>::iterator itData = m_VecData.begin();
	while (aLi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值