约瑟夫问题的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下函数参数的传递(参数带星号的说明)
Sep 19 Python
在Gnumeric下使用Python脚本操作表格的教程
Apr 14 Python
Python数据类型学习笔记
Jan 13 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
Sep 18 Python
Python文件监听工具pyinotify与watchdog实例
Oct 15 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
基于wxPython的GUI实现输入对话框(2)
Feb 27 Python
使用django和vue进行数据交互的方法步骤
Nov 11 Python
Python pip安装模块提示错误解决方案
May 22 Python
Python计算矩阵的和积的实例详解
Sep 10 Python
python 制作磁力搜索工具
Mar 04 Python
Python基础之常用库常用方法整理
Apr 30 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
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
PHP类型约束用法示例
2016/09/28 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
基于JS实现翻书效果的页面切换样式
2017/02/16 Javascript
浅谈javascript的url参数parse和build函数
2017/03/04 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
python实现的一个火车票转让信息采集器
2014/07/09 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
python http基本验证方法
2018/12/26 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
车辆工程专业求职信
2014/06/14 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
维稳工作情况汇报
2014/10/27 职场文书
2014年减负工作总结
2014/12/10 职场文书
房屋产权证明书
2015/06/19 职场文书
公司保密管理制度
2015/08/04 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python