*问题分析与算法设计
约瑟夫问题并不难,但求解的方法很多;题目的变化形式也很多。这里给出一种实现方法。
题目中30个人围成一圈,因而启发我们用一个循环的链来表示。可以使用结构数组来构成一个循环链。结构中有两个成员,其一为指向下一个人的指针,以构成环形的链;其二为该 人是否被扔下海的标记,为1表示还在船上。从第一个人开始对还未扔下海的人进行计数,每数到9时,将结构中的标记改为0,表示该人已被扔下海了。这样循环计数直到有15个人被扔下海为止。

*程序说明与注释

#include<stdio.h>
struct node
{
int nextp; /*指向下一个人的指针(下一个人的数组下标)*/
int no_out; /*是否被扔下海的标记。1:没有被扔下海。0:已被扔下海*/
}link[31]; /*30个人,0号元素没有使用*/
int main()
{
int i,j,k;
printf("The original circle is(+:pagendom,@:christian):\n");
for(i=1;i<=30;i++) /*初始化结构数组*/
{
link[i].nextp=i+1; /*指针指向下一个人(数组元素下标)*/
link[i].no_out=1; /*标志置为1,表示人都在船上*/
}
link[30].nextp=1; /*第30个人的指针指向第一个人以构成环*/
j=30; /*j:指向已经处理完毕的数组元素,从link[i]指向的人开始计数*/
for(i=0;i<15;i++) /*i:已扔下海的人数计数器*/
{
for(k=0;;) /*k:决定哪个人被扔下海的计数器*/
if(k<15)
{
j=link[j].nextp; /*修改指针,取下一个人*/
k+=link[j].no_out; /*进行计数。因已扔下海的人计标记为0*/
}
else break; /*计数到15则停止计数*/
link[j].no_out=0; /*将标记置 0,表示该人已被扔下海*/
}
for(i=1;i<=30;i++) /*输出结果*/
printf("%c",link[i].no_out? '@':'+'); /*+:被扔下海, @:在船上*/
printf("\n");
}

*运行结果
The original circle is(+:pagandom, @:christian):
+++@@+@+@@@+@+++@@+@@@+++@+@@+
(+"表示被扔下海海的非教徒 @:留在船上活命的教徒)

约瑟夫问题这是17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈相关推荐

  1. *约瑟夫问题。这是十七世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个基督教徒和15个异教徒在海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了个办法:30个人围成一个圆

    *约瑟夫问题.这是十七世纪的法国数学家加斯帕在<数目的游戏问题>中讲的一个故事:15个基督教徒和15个异教徒在海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了个办法:30个 ...

  2. 约瑟夫生者死者游戏:有N个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免于难;无奈,大家只得同意这种办法,并议定N个人围成一圈,由

    目录 1.实验题目 2.实验目的 3.概要设计 3.1 问题分析 3.2 流程图 3.3 功能模块

  3. 15个教徒和15 个非教徒在深海上遇险

    /*这是17世纪的法国数学家加斯帕在<数目的游戏问题>中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一 ...

  4. 神奇的交际圈!这位17世纪的法国神父结交的好朋友,竟然都是一流数学牛人:笛卡尔、费马、加森迪······

    全世界只有3.14 % 的人关注了 爆炸吧知识 话说,在近代数学史上,人们惊讶地发现17至18世纪的法国竟然产生了众多一流的数学家. 然而,最早想到要培养一波优秀人才的,成就这段群星璀璨的传奇历史,并 ...

  5. 网络同步在游戏历史中的发展变化(三)—— 状态同步的发展历程与基本原理(上)...

    前言: 网络同步属于游戏开发中比较重要且复杂的一部分,但是由于网上的资料内容参差不齐,很多人直接拿别人的结论写文章,导致很多人对这一块的很多概念和理解都是错误的.本文参考了大量的相关论文和资料(花了半 ...

  6. 围成一圈的排列组合问题_约瑟夫问题

    约瑟夫问题由来 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了 ...

  7. 代码验证约瑟夫环百科词条中的故事(Python)——约瑟夫斯的故事、数学家加帕斯讲的故事,体验算法模板的奇妙。

    [点击此处跳转笔记正文] Python 官网:https://www.python.org/ Free:大咖免费"圣经"教程< python 完全自学教程>,不仅仅是基 ...

  8. 鸿蒙系统研发投入多少,鸿蒙系统研发投入4000至5000人,已经在华为手机上测试完成...

    华为于8月9日的HDC2019大会上发布了国民期待已久的鸿蒙(HarmonyOS)操作系统.余承东介绍了华为自研的鸿蒙OS,鸿蒙为开源,可用于大屏.PC.汽车等各种不同的设备上.鸿蒙还可以随时用在手机 ...

  9. 4星|《维米尔的帽子》:17世纪荷兰画中的全球化踪迹,鸦片与烟草被当时中国主流文化接纳的故事...

    4星|<维米尔的帽子>:17世纪荷兰画中的全球化踪迹,鸦片与烟草被当时中国主流文化接纳的故事 Posted on 2017-11-10 18:46 左其盛 阅读(21) 评论(0) 编辑  ...

最新文章

  1. 绕开bug的feed_dict,用自己的数据集训练DCGAN
  2. NGINX最新API管理模块已可用,针对内部和外部API进行了优化
  3. 《暗黑地牢》—“克苏鲁”式的绝望冒险
  4. Linux 底层原理 —— epoll 与多路复用
  5. 58 MM配置-评估和科目设置-OBYC配置自动记账
  6. ubuntu12.10安装android编译环境
  7. nginx利用try_files实现多个源
  8. SQL Server 2008 R2安装功能选择
  9. 磁盘 RAID0 及其变种详解
  10. 叉乘点乘混合运算公式_数学公式总结人教版初一上册
  11. CC1110使用433MHz收发数据
  12. 地理位置坐标标准以及转换
  13. CodeForces - 1324 D. Pair of Topics 思维+多解法
  14. python 小括号 运算_浅析python 中大括号中括号小括号的区分
  15. opengl全景图转换为天空盒图(成功)
  16. 京东API接口——获取商品详情
  17. js生成二维码,web页面,移动h5页添加微信qq分享功能
  18. 新旧电脑数据如何迁移?电脑数据导入到另一台电脑
  19. java inputstream长度_java.net.*下的相关问题 取得inputStream的长度
  20. 在Ubuntu18.04中安装谷歌地球Google Earth

热门文章

  1. 易康9.0监督分类实操步骤
  2. 单片微型计算机分类,MCS-51系列单片微型计算机及其应用大纲.doc
  3. C语言代码的头文件与源文件有什么区别?
  4. 云计算(二):云计算的三种服务模式
  5. 万字详解秒杀系统!!
  6. 城管移动执法系统,减轻管理压力
  7. 移动质监执法系统项目开发与分享
  8. 讲透学烂二叉树(五):分支平衡—AVL树与红黑树伸展树自平衡
  9. PCIE,USB,SATA速度
  10. elasticsearch php搜索,网站基于ElasticSearch搜索的优化笔记 PHP