约瑟夫问题的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 23 Python
python中函数传参详解
Jul 03 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
python字符串str和字节数组相互转化方法
Mar 18 Python
Python进阶-函数默认参数(详解)
May 18 Python
对Python中9种生成新对象的方法总结
May 23 Python
pandas 时间格式转换的实现
Jul 06 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
python实现图片九宫格分割
Mar 07 Python
使用Python第三方库pygame写个贪吃蛇小游戏
Mar 06 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 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 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
深入分析php之面向对象
2013/05/15 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
Python与shell的3种交互方式介绍
2015/04/11 Python
Python遍历目录的4种方法实例介绍
2015/04/13 Python
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
Python自动化部署工具Fabric的简单上手指南
2016/04/19 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
Django使用Celery异步任务队列的使用
2018/03/13 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
公司培训欢迎词
2014/01/10 职场文书
小学教师国培感言
2014/02/08 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
离婚代理词范文
2015/05/23 职场文书
2016年少先队活动总结
2016/04/06 职场文书