约瑟夫问题的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常用模块介绍
Nov 21 Python
九步学会Python装饰器
May 09 Python
Python内建模块struct实例详解
Feb 02 Python
python中利用zfill方法自动给数字前面补0
Apr 10 Python
python分批定量读取文件内容,输出到不同文件中的方法
Dec 08 Python
python读取txt文件中特定位置字符的方法
Dec 24 Python
在numpy矩阵中令小于0的元素改为0的实例
Jan 26 Python
pycharm创建一个python包方法图解
Apr 10 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
flask开启多线程的具体方法
Aug 02 Python
Python暴力破解Mysql数据的示例
Nov 09 Python
python用opencv 图像傅里叶变换
Jan 04 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与SQL注入攻击[一]
2007/04/17 PHP
PHP Memcached应用实现代码
2010/02/08 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
javaScript 数值型和字符串型之间的转换
2009/07/25 Javascript
div+css布局的图片连续滚动js实现代码
2010/05/04 Javascript
javascript中常用编程知识
2013/04/08 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
使用JS动态显示文本
2017/09/09 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
小程序实现列表多个批量倒计时
2021/01/29 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
Django中url的反向查询的方法
2018/03/14 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
HTML5 Web 存储详解
2016/09/16 HTML / CSS
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
学前教育教师求职自荐信
2013/09/22 职场文书
职工运动会邀请函
2014/02/02 职场文书
矿泉水广告词
2014/03/20 职场文书
品酒会策划方案
2014/05/26 职场文书
营销团队口号
2014/06/06 职场文书
学校就业保障协议书
2019/06/24 职场文书
Nginx报404错误的详细解决方法
2022/07/23 Servers