约瑟夫问题的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 相关文章推荐
详解Django框架中用户的登录和退出的实现
Jul 23 Python
Python实现发送QQ邮件的封装
Jul 14 Python
详解python上传文件和字符到PHP服务器
Nov 24 Python
Python函数参数操作详解
Aug 03 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
PyQt5事件处理之定时在控件上显示信息的代码
Mar 25 Python
python datetime时间格式的相互转换问题
Jun 11 Python
pytorch MSELoss计算平均的实现方法
May 12 Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 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连接SQLServer2005方法及代码
2013/12/26 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
python实现图片处理和特征提取详解
2017/11/13 Python
Python tkinter事件高级用法实例
2018/01/31 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
python使用openpyxl操作excel的方法步骤
2020/05/28 Python
HTML5新增的8类INPUT输入类型介绍
2015/07/06 HTML / CSS
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
自我评价正确写法范文
2013/12/10 职场文书
《盲人摸象》教学反思
2014/02/16 职场文书
环保建议书作文
2014/03/12 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
办公经费申请报告
2015/05/15 职场文书
三八妇女节致辞
2015/07/31 职场文书
初二物理教学反思
2016/02/19 职场文书
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python