C++约瑟夫问题求解

卫衣 / 双肩包 / T 恤/羽绒服等任选,下单送 CSDN 年卡 程序员周边任选一款实物,直接赠送 CSDN 会员年卡+ Coding Plan,写代码学习装备一起拿下 立即抢购

约瑟夫问题: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;
}
约瑟夫问题 题目描述 有n个人围坐在一个圆桌周围,把这n个人一次编号1,2,…,n。从编号1 的人开始报数,数到第m个人就出列,然后从出列的下一个人重新开始报数,数到第m个人又出列………如此反复,直到所有人都出列为止。给出n和m的值,输出出列顺序。 输入 第一行两个数n和m(n,m<=1000) 输出 出列顺序 样例输入 6 5 样例输出 5 4 6 2 3 1 #include<stdio.h> #include<stdlib.h> #include<math.h> i 阅读详情

相关推荐

循环链表示例:求解约瑟夫问题(C++实现)

约瑟夫问题描述: 一个旅行社要从n个旅客中选出一名旅客,为他提供免费的环球旅行服务。旅行社安排这些旅客围成一个圆圈,从帽子中取出一张纸条,用上面写的正整数m(<n)作为报数值。游戏进行时,从第一个人开始按顺时针方向自1开始顺序报数报到m时停止报数,报m的人被淘汰出列,然后从他顺时针方向上的下一个人开始重新报数,如此下去,直到圆圈中只剩下一个人,这个最后的幸存者就是游戏的胜利者,将得到免费旅

一只夏虫 3020

C语言丨约瑟夫问题约瑟夫环)

约瑟夫问题又称为约瑟夫环,约瑟夫问题有很多变种。本文就以几个经典的约瑟夫问题介绍其几种解法。

weixin_60921752的博客 3万+

C++中循环链表求解约瑟夫问题的项目实现

约瑟夫问题(Josephus Problem),是一个著名的理论问题,源自于历史故事。相传,犹太历史学家约瑟夫·弗拉维乌斯在一个围成圈的战士中,提出了一个生存问题:如果战士围成一圈,从某个人开始报数,每隔一定的人数就淘汰一个,直到剩下最后一个人,这个人应该站在哪个位置上?这个问题经过数学化抽象后,成为了计算机科学中的一个重要研究对象,尤其是对于数据结构和算法设计有着深远的影响。在计算机科学领域,约瑟夫问题通常用循环链表这一数据结构来求解,这为理解和运用循环链表提供了一个实际的应用场景。

weixin_35886636的博客 333

约瑟夫问题

已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。求最后一个出列的人的编号。 用ArrayList解,每次算出出列的人的编号,从list中移除。这样的时间复杂度是O(MN),N为人数,M为报数的那个数。 代码来自 https://ba

GraceZhang的博客 672

约瑟夫问题,过程推理,递归

约瑟夫问题描述:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,(来自百度百科)。一般题会让我们求出最后一个人几号; 先举一个简单的例子吧:                                              

CS33sun的博客 1401

约瑟夫问题 C++求解

约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,其表述方式有多种,较典型的一种是: 有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1 开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。 解法一:数组求解 根据输入的n值确定数组的长度...

MilkLeong的博客 1万+

约瑟夫问题C++求解

#include using namespace std; struct child { int id; child *nextChild; child *preChild; }; class Game { private: int sum; int k; child first; public:

wuxinliulei的专栏 1506

约瑟夫问题求解程序 C++

问题描述:N个人围成一圈,从第一个人开始报数报到m的人出圈,剩下的人继续从1开始报数报到m的人出圈;如此往复,直到所有人出圈。(模拟此过程,输出出圈的人的序号) 这是写的一种解法,后续可能还会研究一下其他解法,写了再发。 // joesphus.cpp : 约瑟夫问题程序解法。 // #include "stdafx.h" #include <iostream> using n...

weixin_43862688的博客 1397

C++面向对象方法求解约瑟夫问题

约瑟夫问题有很多种解法及其变种,这里的约瑟夫问题是这样的: [b]约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列.[/b] 大多数的约瑟夫问题解法是利用面积过程的方法编写的(其实我没有看过多少

心清的专栏 5123

约瑟夫问题的python代码及注释_约瑟夫问题的Python和C++求解方法

么是约瑟夫问题约瑟夫问题是一个有趣的数学游戏,游戏规则如下:1、N个人围成一个圈,编号1开始,依次到N。2、编号为M的游戏参与者开始报数报数1开始,后面的人报数接龙,直到K为止,报数为K的人将出局。3、出局者的下一个玩家接着从1开始报数,如此循环,直到剩下一个玩家时游戏结束,这个玩家就是游戏获胜者。那么问题来了,哪个编号是游戏获胜者呢?下面通过简单的几行python代码来解决这个问题:#!...

weixin_42237496的博客 801

用循环链表求解约瑟夫问题c++实现)

前言 初学数据结构,关于循环链表,目前还在表层,特以约瑟夫环为例学习循环链表,全文仅供参考,如有不足的地方还望多多指教。 提示:以下是本篇文章正文内容,下面案例可供参考 一、约瑟夫环 据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止..

qq_59187183的博客 3348

C++15周项目3 -约瑟夫

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/9018813【项目3】Josephus(约瑟夫环)问题  n个小孩子围成一圈,从第一个小孩子开始顺时针方向数数字,到第m个小孩子离开,这样反反复复,最终只剩下一个

迂者-贺利坚的专栏 8611

王道机试-约瑟夫问题

题目描述: n个小孩围坐成一圈,并按顺时针编号1,2.,.-,n,从编号为p的小孩顺时针依次报数,由1报到m,报到m时,这名小孩从圈中出去:然后下一名小孩再从1报数报到m时再出去。以此类推,直到所有小孩都从圈中出去。请按出去的先后顺序输出小孩的编号。 输入: 第一个是n,第二个是p,第三个是m (0<m, n< 300)。 最后一行是: 000. 输出: 按出圈的顺序输出编号,编号...

qq_41581765的博客 375

约瑟夫问题求解C++循环链表)

约瑟夫问题求解

weixin_66549669的博客 512

C++数组实现约瑟夫问题

约瑟夫问题是数据结构与算法里的经典问题。我用C++数组写了个解答,并且加入了异常处理,来保证程序的正确性和健壮性。本人能力较差,让诸位大牛见笑了,请多多指教! 问题描述:设n个人围坐在一个圆桌周围,现在从s个人开始报数,数到第m个人,让他出局;然后从出局的下一个人重新报数,数到第m个人,再让他出局,……,如此反复直到所有的人全部出局为止。下面要解决的Josephus问题是:对于任意给定的n,s和...

QQ67856的博客 2478

C++实现约瑟夫环(附带源码)

约瑟夫问题(Josephus Problem)是一个经典的数学问题问题描述如下: 有 nn 个人(编号1到n),站成一个圆圈。每次从第一个人开始,按顺时针方向数到第 m 个人(即跳过 m−1 个人),这个人将被淘汰,剩下的人继续按相同的方式数,直到最后只剩一个人。问题是要找出最后剩下的人的编号

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1263

约瑟夫算法

&amp;lt;span hidden=&quot;&quot; itemprop=&quot;author&quot; itemscope=&quot;&quot; itemtype=&quot;http://schema.org/Person&quot;&amp;gt; &amp;lt;meta itemprop=&quot;name&quot; content=

qq_40627648的博客 1728

【数组与链表】循环链表实战 - 约瑟夫问题求解

该案例直观展示了循环链表在解决环形数据淘汰问题中的高效性和简洁性,是数据结构与算法结合的经典实战。

华为云官方博客 1115
上一篇: fatal error C1083: Cannot open include file: 'streambuf': No such file or directory解决方案
下一篇: python爬取动态网页的内容
Cosmop01itan
博客等级 码龄10年 143粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值