约瑟夫问题的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 Web服务器Tornado使用小结
May 06 Python
详解Python中的正则表达式的用法
Apr 09 Python
python检测是文件还是目录的方法
Jul 03 Python
Python实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
Python实现的用户登录系统功能示例
Feb 05 Python
Python中反射和描述器总结
Sep 23 Python
python将txt文件读入为np.array的方法
Oct 30 Python
TensorFLow 变量命名空间实例
Feb 11 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
Python3 assert断言实现原理解析
Mar 02 Python
python中pop()函数的语法与实例
Dec 01 Python
Python实现简单的2048小游戏
Mar 01 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 删除无限级目录与文件代码共享
2008/11/22 PHP
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
Python之Web框架Django项目搭建全过程
2017/05/02 Python
python实现简易动态时钟
2018/11/19 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
python实现祝福弹窗效果
2019/04/07 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
应届生新闻编辑求职信
2013/11/19 职场文书
财务负责人任命书
2014/06/06 职场文书
道路施工安全责任书
2014/07/24 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
初一年级组工作总结
2015/08/12 职场文书
决心书格式范文
2015/09/23 职场文书
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
Python3.10的一些新特性原理分析
2021/09/15 Python
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技