约瑟夫问题的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数据分析之真实IP请求Pandas详解
Nov 18 Python
利用python爬取软考试题之ip自动代理
Mar 28 Python
Python基础教程之浅拷贝和深拷贝实例详解
Jul 15 Python
python实现微信跳一跳辅助工具步骤详解
Jan 04 Python
scrapy爬虫完整实例
Jan 25 Python
详解Python使用tensorflow入门指南
Feb 09 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
Aug 06 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
Jun 23 Python
Python 中如何写注释
Aug 28 Python
python利用递归方法实现求集合的幂集
Sep 07 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中使用XML
2006/10/09 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
js常用函数 不错
2006/09/08 Javascript
用javascript自动显示最后更新时间
2007/03/15 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
Node.js实现数据推送
2016/04/14 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
2017/01/13 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
毕业自我评价范文
2013/11/17 职场文书
求职简历推荐信范文
2013/12/02 职场文书
三好学生自我鉴定
2013/12/17 职场文书
家长会邀请书
2014/01/25 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
上诉状格式
2015/05/23 职场文书
律师催款函范文
2015/06/24 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
国际贸易实训总结
2015/08/03 职场文书
SQL Server中使用表变量和临时表
2022/05/20 SQL Server