josephus 问题的算法(转载)
Josephus 问题:
一群小孩围成一个圈,任意假定一个数 m,从第一个小孩起,顺时针方向数,每数到第 m 个小孩时,该小孩便离开。小孩不断离开,圈子不断缩小,最后剩下的一个小孩便是胜利者。究竟胜利的是第几个小孩呢?
案例分析:
解答这个问题,首先要定义一个数组,其元素个数就是小孩个数。必须预先设置一个小孩个数常量,以便定义一个数组。
对每个小孩赋以一个序号作为小孩的标志。由于数组是局部作用域的,一旦分配之后,就删不去,得等到作用域结束才会自动抹去,所以当小孩离开时,只能修改该数组元素值来表示小孩的离开。
数组是线性排列的,小孩是围成圈的,用数组表示小孩围成的圈,要有一种从数组尾部跳到数组头部的技巧,这就是“加1取模”。当数到数组尾的时候,下一个数组下标值可以算得为0,从而回到数组首以继续整个过程。程序如下:
#include "stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std; int _tmain(int argc, _TCHAR* argv[])
{
//建立小孩数组
const int num = ; //小孩个数
int interval; //每次数 interval 个小孩,便让该小孩离开
int a[num]; //小孩数组 //给小孩编号
for(int i=; i<num; i++) //小孩的编号只与小孩的个数有关
a[i]=i+;
//输入小孩间隔 interval
cout<<"please input the interval:";
cin>>interval; //将全体参加的小孩输入
for(int i=; i<num; i++) //顺序输出开始时的小孩编号
cout<<a[i]<<",";
cout<<endl; int k=; //表示处理第 k 个离开的小孩
int i=-; //数组下标(下一个值 0 就是第一个小孩的下标)
//处理获胜前的小孩
while(true)
{
//在圈中数 interval 个小孩
for(int j=; j<interval; )
{
i=(i+) % num; //对下标加 1 取模(使得最后和一个小孩的下一个是第一个小孩)
if(a[i] != ) //如果该小孩在圈中,则承认该数有效
j++;
}
if(k == num)
break; //该小孩是最后的胜利者
cout<<a[i]<<","; //输出离开的小孩编号
a[i] = ; //表示该小孩已经离开
k++; //准备处理下一个圈中的小孩
} //break 语句跳转到此
cout<<endl<<"No."<<a[i]<<"boy's won."<<endl; return ();
}
原文地址:《Visual C++ 编程从基础到应用》 第四章末尾案例
josephus 问题的算法(转载)的更多相关文章
- A* 寻路算法[转载]
A* 寻路算法 转载地址:http://www.cppblog.com/christanxw/archive/2006/04/07/5126.html 原文地址: http://www.gamedev ...
- GJM : 数据结构 - 轻松看懂机器学习十大常用算法 [转载]
转载请联系原文作者 需要获得授权,非法转载 原文作者将享受侵权诉讼 文/不会停的蜗牛(简书作者)原文链接:http://www.jianshu.com/p/55a67c12d3e9 通过本篇文章可以 ...
- 解读BloomFilter算法(转载)
1.介绍 BloomFilter(布隆过滤器)是一种可以高效地判断元素是否在某个集合中的算法. 在很多日常场景中,都大量存在着布隆过滤器的应用.例如:检查单词是否拼写正确.网络爬虫的URL去重.黑名单 ...
- 数据结构图之三(最短路径--迪杰斯特拉算法——转载自i=i++
数据结构图之三(最短路径--迪杰斯特拉算法) [1]最短路径 最短路径?别乱想哈,其实就是字面意思,一个带边值的图中从某一个顶点到另外一个顶点的最短路径. 官方定义:对于内网图而言,最短路径是指两 ...
- AStar算法(转载)
以下的文章来至http://blog.csdn.net/debugconsole/article/details/8165530,感激这位博主的翻译,可惜图片被和谐了,所以为方便阅读,我重新把图片贴上 ...
- 浅谈MySQL索引背后的数据结构及算法(转载)
转自:http://blogread.cn/it/article/4088?f=wb1 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储 ...
- 展开BOM并使用最终用量的算法(转载)
本文系转载子ITPUB,如果有侵犯您权益的地方,烦请及时的告知与我,我即刻将停止侵权行为: 网址:http://www.itpub.net/thread-1020586-1-1.html http:/ ...
- 调用sklearn包中的PLA算法[转载]
转自:https://blog.csdn.net/u010626937/article/details/72896144#commentBox 1.Python的机器学习包sklearn中也包含了感知 ...
- Rsync实现文件同步的算法(转载)
Rsync文件同步的核心算法 文章出处:http://coolshell.cn/articles/7425.html#more-7425 rsync是unix/linux下同步文件的一个高效算法,它能 ...
随机推荐
- Unity3D游戏开发之粒子系统实现具体解释
今天为大家分享的是Unity3D中的粒子系统.粒子系统通经常使用来表现烟雾.云等高级效果.是一个十分注重制作技巧的部分.今天我们将以一个气泡的演示实例来一起学习怎样在Unity3D中使用粒子系统 ...
- 微信小程序引入外部js 方法
步骤: 1.首先将外部js放在你指定的文件夹里(这都是废话...) 2.接下来 将该js文件中你要使用的方法给暴露出来 3.在您要使用的js中引入该js 4.使用暴露出来的方法 例子:使用md5加密 ...
- 数据库DCL、DDL、DML、DQL
SQL三部分:data manipulation language DCL: (控制)管理用户权限(GRANT.REVOKE),数据库整体配置 DDL: (定义)作用于数据库,表, ...
- ulink函数的使用【学习笔记】
#include "apue.h" #include <fcntl.h> int main(void) { ) err_sys("open error&quo ...
- 数组、栈、堆(java基础知识五)
1.数组概述.定义格式 * A:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数据类型,也可以存储引用数据类型. * B:数组定义格式 格式1:数据类型[ ...
- 如何去掉idea里mybatis的.xml文件 sql 语句背景色
点击有背景的地方 Alt+Enter选择 un-inject Language/refence 即可去掉
- python中的异常处理try/except/finally/raise
异常发生在程序执行的过程中,如果python无法正常处理程序就会发生异常,导致整个程序终止执行,python中使用try/except语句可以捕获异常. try/except 异常的种类有很多,在不确 ...
- 【POJ 3580】 SuperMemo
[题目链接] 点击打开链接 [算法] 本题也是Splay区间操作的模板题,不过要比BZOJ 3223要稍微复杂一些,做完此题后,我终于对Splay有了更深入的理解,有“拨开云雾见青天”的感觉 本题还是 ...
- you are the one(区间dp)
传送门 You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- fastText(三):微博短文本下fastText的应用(二)
上一篇讲到,fastText在训练数据中过拟合的问题.接下来将介绍一些提高fastText泛化能力的尝试. 模型泛化使用过fastText的人,往往会被它的很多特性征服,例如训练速度.兼具word e ...