C++约瑟夫问题求解

约瑟夫问题:n个骑士编号1,2,…,n,围坐在圆桌旁。编号为1的骑士从1开始报数,报到m的骑士出列,然后下一个位置再从1开始报数,找出最后留在圆桌旁的骑士编号。
(1)编写一个函数模板。以一种顺序容器的类型作为模板参数,在模板中使用指定类型的顺序容器求解约瑟夫问题。m,n是该函数模板的形参。
程序参考的输入(数字前为提示文字):
Input n and m:7 3
程序参考的输出:
Result:4

#include <iostream>
#include <vector>

using   namespace   std; 

template    <typename   T>
int Joseph(int n,int m)
{
    T   v;
    //vector<int>::iterator t;
    for(int i=1;i<=n;i++)
    {
        v.push_back(i);
    }
    int start = 0;
    //t = v.begin();
    while(v.size()!=1)
    {
        start = (start+m-1)%v.size();
        //cout << start << endl;
        v.erase(v.begin()+(start));
    }
    return v[0];

 } 
int main()
{
    int n,m;
    cout << "Input n and m:";
    cin >> n >> m;
    int t = Joseph<vector<int>>(n,m);
    cout << "Result:" << t << endl;
    return 0;
}
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值