约瑟夫问题的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 相关文章推荐
centos系统升级python 2.7.3
Jul 03 Python
Python的collections模块中namedtuple结构使用示例
Jul 07 Python
利用Python破解验证码实例详解
Dec 08 Python
python3中int(整型)的使用教程
Mar 23 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
Python实现的径向基(RBF)神经网络示例
Feb 06 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
深入学习python多线程与GIL
Aug 26 Python
python采集百度搜索结果带有特定URL的链接代码实例
Aug 30 Python
Python3实现二叉树的最大深度
Sep 30 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
Mar 03 Python
python解析照片拍摄时间进行图片整理
Jul 23 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教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
php ctype函数中文翻译和示例
2014/03/21 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
深入剖析PHP中printf()函数格式化使用
2016/05/23 PHP
php服务器的系统详解
2019/10/12 PHP
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
python选择排序算法的实现代码
2013/11/21 Python
Python中无限元素列表的实现方法
2014/08/18 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
Python定时器实例代码
2017/11/01 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
python实现dijkstra最短路由算法
2019/01/17 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
对Django的restful用法详解(自带的增删改查)
2019/08/28 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
市场营销毕业生自荐信
2013/11/23 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
基层党建工作简报
2015/07/21 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
MySQL慢查询优化解决问题
2022/03/17 MySQL
CentOS下安装Jenkins的完整步骤
2022/04/07 Servers