什么是“约瑟夫问题”?

据说在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人到,于是决定了 一个自杀方式,41个人排成一个圆圈,由第1个人 开始报数,每报数到第3人该人就必须自杀, 然后再由下一个重新报数,直到所有人都自杀身亡为止。然而约瑟夫和他的朋友并不想遵从,约瑟夫要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

问题分析

为清晰理解,采用代数分析方式进行分析。先将这个问题扩大,假设现在 人物甲与它的m个朋友参与了这个游戏,那么人物甲要如何保护它自己以及它的朋友?只需要画两个圆圈就可以看出如何避免这个游戏,内圈是排列顺序,外圈是自杀顺序,如下图所示(图片来源于参考):

借助数组作为工具,将数组当作环状进行处理,在数组中由1开始计数,每找到三个无数据位就填入一个数字,直到计数到41为止,然后将数组从计数1一一输出,就可以看出每个位置的自杀顺序,这就是约瑟夫排列,如下所示:

14 36 1 38 15 2 24 30 3 16 34 4 25 17 5 40 31 6 18 26 7 37 19 8 35 27 9 20 32 10 41 21 11 28 39 12 22 33 13 29 23

由上可知,最后一个自杀的是在第31个位置,而倒数第二个自杀的要排在第16个位置,之前的人都死光了,所以他们也就不知道约琴夫与他的朋友并没有遵守游戏规则了。

代码实现

#include <stdio.h>
#include <stdlib.h>
#define N 41
#define M 3int main(){int man[N] = {0}; int count = 1;int i = 0, pos = -1; int alive = 0;while(count <= N){ do{pos = (pos+1) % N;//环状处理if(man[pos] == 0){i++;} if(i == M){ // 报数为3了i = 0;break;}}while(1);man[pos] = count; count++;}printf("\n约琴夫排列:\n"); for(i = 0; i < N; i++){printf("%d ", man[i]);}      printf("\n\n您想要救多少人:"); scanf("%d", &alive);    printf("\nP表示这%d人要放的位置:\n\n", alive);for(i = 0; i < N; i++){if(man[i] > alive){printf("D"); }else{printf("P");} if((i+1) % 5 == 0){printf("   ");}} printf("\n"); return 0;
}

运行结果

写在最后:

        读两遍下来,如果仍然有不清楚的地方,可以再来一遍。

        如果你有其他感到困惑的问题,欢迎留言。

C编程实例-“约瑟夫问题” 解法相关推荐

  1. pq分解法潮流计算c语言编程 因子表,PQ分解法潮流计算编程实例.pdf

    PQ分解法潮流计算编程实例.pdf 电力系统分析电力系统分析 Power System AnalysisPower System Analysis PQ分解法编程实例分解法编程实例 通过本讲主要回答如 ...

  2. python高级练习题:多米诺平铺 - 5×2N局【难度:4级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python高级练习题:多米诺平铺 - 5×2N局[难度:4级]: 请还检查了在[多米诺拼接系列]其他练习题(https://www.codewars.com/collections/5d19554d ...

  3. python进阶练习题:馏分类【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python进阶练习题:馏分类[难度:2级]: 为您提供了类"分数",这两个参数(分子,分母)的骨架. 例: fraction1 =分数(4,5) 分数fraction1 =新分数 ...

  4. python基础练习题:简单有趣#32:创建字谜【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python基础练习题:简单有趣#32:创建字谜[难度:1级]: 任务 现在给你两个字符串S和长度相同的T,由大写英文字母.你的任务是找到获得一些anagram的串T从字符串s需要"更换操作 ...

  5. python基础练习题:Covfefe【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python基础练习题:Covfefe[难度:1级]: Covfefe 你给出的字符串.你必须用'covfefe但替换的单词(S)coverage,如果你没有找到字符串中的单词'coverage,你必 ...

  6. Python基础练习题:杂乱无章的页面列表【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    Python基础练习题:杂乱无章的页面列表[难度:1级]: 你得到了一本古老的书,不幸的是有几页错误的位置,幸运的是你的计算机有一个从"1"到"n"的顺序的每个 ...

  7. python进阶练习题:简单有趣#301:跳绳游戏【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python进阶练习题:简单有趣#301:跳绳游戏[难度:2级]: 任务 有些孩子在玩跳绳游戏.儿童跳过绳子在大致相同的速度:每一次秒'.如果孩子跳时失败,他需要整理一下绳子,然后继续.这将需要3 s ...

  8. python进阶练习题:格式化像“巴特,莉萨和玛吉”名称的字符串。【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python进阶练习题:格式化像"巴特,莉萨和玛吉"名称的字符串.[难度:2级]: 给定:含名称的散列数组 返回:格式化为除了最后两个名字,应该由一个符号分隔用逗号分隔的名称列表的 ...

  9. python基础练习题:棋盘【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python基础练习题:棋盘[难度:1级]: 编写打印N行M列下列规则棋盘的程序: 左上角单元格必须是一个星号(*) 任何细胞接触(左,右,上,下)有星号的小区必须是一个点(.) 任何细胞接触(左,右 ...

  10. python进阶练习题:自圣诞树III:叶中心【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python进阶练习题:自圣诞树III:叶中心[难度:2级]: 任务 圣诞节快到了.在[以前的习题(https://www.codewars.com/kata/5a405ba4e1ce0e1d7800 ...

最新文章

  1. 职称考试还要考计算机 英语,强烈建议取消所谓的英语职称和计算机考试
  2. 注册中心 Eureka 源码解析 —— 应用实例注册发现(五)之过期
  3. C语言指针函数MFC版Demo
  4. 【完结】如何学习AutoML在模型优化中的应用,这12篇文章可以作为一个参考
  5. 【PyQT5编程】Pycharm结合QtDesigner使用示例:创建登录窗体
  6. Androidstudio项目更换gradle版本
  7. (23)VHDL实现乘法器
  8. JavaScript之数组去重
  9. 树莓派 - 蓝牙 (1) 试试Beacon
  10. 外企程序员常用英语单词
  11. 学计算机笔画,学汉字学笔顺电脑版
  12. 国内信息安全行业常见法律法规介绍及个人理解
  13. cocos实现PC端鼠标指针更换功能
  14. android软键盘和导航栏冲突,Android透明状态栏和软键盘配合的坑
  15. matlab批量处理程序设计,Matlab实现批量处理图像的两种方法
  16. 三件套都有什么_单人床品三件套都有哪些?
  17. 电脑连接蓝牙耳机还是外放,输出设备只有扬声器怎么解决?
  18. Linux设备管理(一)_kobject, kset,ktype分析
  19. 【系统设计】Verilog语法及示例(2)
  20. 机器学习实战- 回归(Regression) 概述

热门文章

  1. doc 问卷调查模板表_问卷调查表.doc
  2. 网上邻居看不到共享的计算机,网上邻居看不到其它共享电脑怎么办?
  3. Studio 3T使用教程,本人详细介绍连接Mongodb过程
  4. C++一本通在线测评网站 题目1224
  5. crc32 C语言程序
  6. vbs编程中 on error resume next的意思
  7. 什么软件能测试显卡功耗,如何在win10中检查计算机的显卡功耗
  8. 大数据入门教程系列之Hbase安装(伪分布式)
  9. 直播预告| 基于神经网络模型的开放领域对话系统研究
  10. 高级计量经济学及stata应用_推荐使用的计量经济学教材