约瑟夫问题的Python和C++求解方法


Posted in Python onAugust 20, 2015

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

#!/usr/bin/env python 
# Joseph Problem 
def joseph(total, begins, count): 
  queue = range(1, total + 1) 
  death = (begins + count - 2) % len(queue) 
  for times in range(total - 1): 
    print 'out: ', queue[death] 
    del queue[death] 
    death = (death + count -1) % len(queue) 
  print 'survivor: ', queue[0]

joseph()函数中,参数total即上面提到的N,begins即M,count及K,每次循环报数out一个编号,最后剩下的survivor便是游戏获胜者。

而C++的通常实现方法如下:

#include <iostream>
using namespace std;
void main()
{
 int N=0,C=0;
 cout<<"Please enter the number of people:N=";
 cin>>N;
 cout<<"Please enter:C=";
 cin>>C;
 int i=0,j=0,n=N,s=0;
 int *a=new int [N];
 for (i=0;i<N;i++)
 {
 a[i]=1;
 }

 while(0!=n)
 {
 s+=a[j];
 if(C==s)
 {
  a[j]=0;
  s=0;
  --n;
  if(0!=n)
  {
  cout<<j+1<<"->";
  }
  else
  {
  cout<<j+1<<endl;
  }
 }
 j=(j+1)%N;
 }
 delete []a;
}

这是C++语言常见的机试题目,以下程序实现从控制台输入人数N,C并将剔除出队列的人员编号按顺序输出到控制台上。

Python 相关文章推荐
python使用clear方法清除字典内全部数据实例
Jul 11 Python
如何利用Fabric自动化你的任务
Oct 20 Python
基于Python os模块常用命令介绍
Nov 03 Python
Python实现去除列表中重复元素的方法小结【4种方法】
Apr 27 Python
解决Pycharm出现的部分快捷键无效问题
Oct 22 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
python如何输出反斜杠
Jun 18 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 Python
python tqdm库的使用
Nov 30 Python
Github 使用python对copilot做些简单使用测试
Apr 14 Python
在类Unix系统上开始Python3编程入门
Aug 20 #Python
Python中字典映射类型的学习教程
Aug 20 #Python
Python3字符串学习教程
Aug 20 #Python
Python中列表和元组的相关语句和方法讲解
Aug 20 #Python
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 #Python
使用Python求解最大公约数的实现方法
Aug 20 #Python
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 #Python
You might like
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
Javascript hasOwnProperty 方法 &amp; in 关键字
2008/11/26 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
JavaScript常用判断写法大全(推荐)
2016/05/30 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
JS 获取HTML标签内的子节点的方法
2016/09/21 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
在 React、Vue项目中使用SVG的方法
2018/02/09 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
Python程序运行原理图文解析
2018/02/10 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
python实现扫雷游戏
2020/03/03 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
鉴定评语大全
2014/05/05 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
出售房屋委托书范本
2014/09/24 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
初中作文评语
2014/12/25 职场文书
公司搬迁通知
2015/04/20 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android