C/C++02: Josephus问题

据说著名犹太历史学家Josephus有过以下的故事:
在罗马人占领乔塔帕特後,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。
然而Josephus和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
用循环列表的数据结构是比较容易实现的,下面是我曾经用数组的方法(纯粹是为了玩一玩)完成的C程序,应该在实现上还可以有改进。
 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int N = 41;
 6     int i = 1;
 7     int m = 3;
 8     int MAX = N;
 9     int k, t;
10     int a[100], b[100];
11     for (k = 0; k < N; k++)
12     {
13         b[k] = k + 1;
14     }
15     for(k = 0; k < MAX; k++)
16     {
17         t = (i + m - 1) % N;
18         if (t - 1 < 0) 
19         {
20             a[k] = b[N-1];
21             i = N;
22         }
23         else 
24         {
25             a[k] = b[t-1];
26             i = t;
27             while (t < N) 
28             {
29                 b[t-1] = b[t];
30                 t++;
31             }
32         }
33         N = N - 1;
34         printf("%i ", a[k]);
35     }
36     printf("\n");
37     return 0;
38 }

 

转载于:https://www.cnblogs.com/toorist/p/4845304.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ahci模式下无法启动Linux,电脑AHCI模式无法开启是怎么回事?

安装之前就要开启ahci&#xff0c;然后安装系统&#xff0c;如果在ide模式下安装了&#xff0c;是不能随意的改到ahci的&#xff01;你的情况只能重装系统解决了&#xff01;看看你的主板&#xff0c;有没有第三方芯片的sata口&#xff0c;如果有&#xff0c;你把第三方芯片的s…

LeetCode Solutions : Reorder List

Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do this in-place without altering the nodes values. For example, Given {1,2,3,4}, reorder itto {1,4,2,3}. Considering the following steps: * 1. split…

双系统linux触摸板不能用,windows系统与ubuntu双系统导致笔记本触摸板失灵的解决办法(非输入代码)...

先说一下我现在的笔记本使用的系统&#xff0c;windows10 64位&#xff0b;ubuntu14.04 64位。这几天把ubuntu装好后本来毫无问题的&#xff0c;用的飞起&#xff5e;可是昨天不知道什么原因&#xff0c;触摸板突然失灵了&#xff0c;插上鼠标可以用&#xff0c;就是触摸板不能…

JS 入门经典 第三章 判断、循环和函数

1、比较运算符 在所有的比较运算符中&#xff0c;和&#xff01;的优先级最低&#xff0c;而>、<、<、>则具有相同的优先级 所有的比较运算度的优先级都比算数运算符要低&#xff0c;所以先执行算数运算符&#xff0c;在执行比较运算符。 2、字符串的比较 JS将按照…

linux c fifo阻塞写和非阻塞写,linux—FIFO的使用与非阻塞标志(O_NONBLOCK)的影响

FIFO文#include #include int mkfifo( const char*pathname, mode_t mode);参数&#xff1a;pathname&#xff1a;FIFO的路径名文件名。mode&#xff1a;mode_t类型的权限描述符&#xff0c;同open的参数。返回值&#xff1a;成功&#xff1a;返回0失败&#xff1a;如果文件已经…

Servlet的学习之Request请求对象(2)

在上一篇《Servlet的学习(十)》中介绍了HttpServletRequest请求对象的一些常用方法&#xff0c;而从这篇起开始介绍和学习HttpServletRequest的常用功能。 使用HttpServletRequest可以防止盗链行为&#xff0c;什么是盗链行为&#xff0c;比如说在一个别的网站上超链接&#xf…

如何提高linux的时钟精度,Linux时钟精度提高有什么办法?

2 动态高精度时钟设计和实现动态高精度时钟设计方案借鉴了KURT-Linux思想&#xff0c;但与其不同的是提供一个与标准Linux核心时钟并行的具有精密刻度的实时时钟&#xff0c;并与原核心时钟区别开。采用X86体系CPU提供的TSC作为高精度的时间标度&#xff0c;权衡一定时间段(如一…

c语言循环程序怎么编程,c语言程序(5):循环结构程序设计

#include #include #include /*循环结构:1.基本循环语句while循环do_while循环for循环1.1 所有的的循环&#xff0c;都是满足条件循环1.2 while循环while(条件){循环体;}1.3 kbhit() :监测键盘是否按键&#xff0c;1.4do{循环体;}while(count<3);1.5 for循环for(表达式1;表达…

Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例

1. 通过多线程改进刚才的聊天程序&#xff0c;这样我就可以实现在一个窗口发送和接收数据了 2. 代码示例&#xff1a; &#xff08;1&#xff09;SendThread.java&#xff0c;如下&#xff1a; 1 package com.himi.udpDemo2;2 3 import java.io.BufferedReader;4 import java.…

c语言宿舍管理设计报告,C语言课程设计—学生宿舍管理系统设计报告.doc

word格式精心整理版范文范例 学习指导课 程 设 计 报 告课程名称 C语言程序设计课题名称 学生宿舍管理系统专 业班 级学 号姓 名指导教师2012年6月19日湖南工程学院课 程 设 计 任 务 书课程名称 C语言程序设计课 题 学生宿舍管理系统专业班级学生姓名学 号指导老师审 批任务书…

EF编辑

//修改推荐的信息 var productRe db.Shop_ProductRecommends.Single(item > item.Id model.Id); productRe.seat model.seat; db.Set<Shop_ProductRecommends>().Attach(productRe); db.Entry(productRe).State EntityState.Modified;转载于:https://www.cnblogs.…

考勤管理系统c语言,C语言课程设计学生考勤系统最终版(范文1)

《C语言课程设计学生考勤系统.doc》由会员分享&#xff0c;可免费在线阅读全文&#xff0c;更多与《C语言课程设计学生考勤系统(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、&#xff1b;return(head)&#xff1b;}voidenter()*录入函数*{structS…

关于类和接口的一些小笔记

如果一个类实现了多个接口&#xff0c;如果将这个类实例化&#xff0c;那么这些接口之间可以互相调用的。转载于:https://www.cnblogs.com/pilihaotian/p/4868609.html

汇编语言调用c语言ads,ADS1.2 在汇编代码中调用C函数

EDA365欢迎您登录&#xff01;您需要 登录 才可以下载或查看&#xff0c;没有帐号&#xff1f;注册x, U) b) } U8 \" d/ v( \$ ~ T对于ARM体系来说&#xff0c;不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure Call Standard)&#xff0c;…

c语言选择法排序案例,谁能给我一个c语言选择排序法的简单例子

满意答案evil83752014.02.27采纳率&#xff1a;51% 等级&#xff1a;11已帮助&#xff1a;7590人#include int main(){int array[100], n, c, d, position, swap;printf("Enter number of elements\n");scanf("%d", &n);printf("Enter %d inte…

huffman算法c语言实验报告,huffman二叉树实验报告--数据结构(c语言).doc

江海强 PAGE 7数 据 结 构 作 业 报 告——Huffman二叉树实验报告姓名&#xff1a;江海强班级&#xff1a;070921班学号上机时间&#xff1a;2010-报告时间&#xff1a;2010-10-26摘要1.实验目的本实验是为了让我们深入了解Huffman二叉树&#xff0c;学会使用Huffman编码…

《炉石传说》建筑设计欣赏(7):采用Google.ProtocolBuffers处理网络消息

这一次&#xff0c;琢磨了一下Unity3D网络游戏发展的网络信息处理。服务器的网络游戏一般都是自主研发&#xff0c;因此&#xff0c;相应的网络消息处理应该培养自己。client/现在使用的邮件服务器之间的价差JSON和Google.ProtocolBuffers有两种常见的方法。平炉码看其处理。代…

tarjan算法c语言,tarjan算法板子 - osc_e45irv7l的个人空间 - OSCHINA - 中文开源技术交流社区...

无向图概念时间戳\(dfn[x]\),在深度优先遍历中&#xff0c;按照每个节点第一次被访问的顺序&#xff0c;依次做整数标记追溯值\(low[x]\),通过非搜索边能到达的最小时间戳割边判定法则无向边\((x,y)\)是割边/桥&#xff0c;当且仅当存在x的一个子节点满足\(dfn[x] < low[y]\…

流和文件

流&#xff1a;流是数据的传输方式&#xff1b;C程序处理一个流而不是直接处理文件。你声明一个FILE *fp &#xff0c;并把fopen(某个文件)返回的值赋予fp这两个动作就相当于建立了一个水龙头&#xff0c;当你用getc(fp)之类的输入函数读取文件字符时就相当于拧开了水龙头&…

小球进盒子C语言,N个小球放进M个盒子算法-Go语言中文社区

N个小球放入M个盒子共有多少种方法&#xff0c;并输出的算法设计&#xff1a;算法思路1 &#xff1a;暴力填充盒子每个小球都可能放入M个盒子的任意一个&#xff0c;所以直接根据小球个数做递归即可,然后将存储放入hash中排重//TODO算法思路2 &#xff1a;递归填充盒子即&#…