约瑟夫问题的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模拟鼠标拖动操作的方法
Mar 11 Python
python中redis的安装和使用
Dec 04 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
python中设置超时跳过,超时退出的方式
Dec 13 Python
Python如何读取文件中图片格式
Jan 13 Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 Python
Python中实现输入一个整数的案例
May 03 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
Nov 26 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 Python
Python读写Excel表格的方法
Mar 02 Python
python中pymysql包操作数据库方法
Apr 19 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
一个php作的文本留言本的例子(四)
2006/10/09 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
基于javascript实现的快速排序
2016/12/02 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
基于 D3.js 绘制动态进度条的实例详解
2018/02/26 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
Vue3 实现双盒子定位Overlay的示例
2020/12/22 Vue.js
Python函数中定义参数的四种方式
2014/11/30 Python
django2.0扩展用户字段示例
2019/02/13 Python
python安装后的目录在哪里
2020/06/21 Python
树莓派升级python的具体步骤
2020/07/05 Python
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
求职信怎么写
2014/05/23 职场文书
营销经理工作检讨书
2014/11/03 职场文书
2014年稽查工作总结
2014/12/20 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers