/************************************************************************/ /* Josephus问题--数组实现 */ /************************************************************************/ #include <stdio.h> #include <malloc.h> int Josephus(int times, int num…
import java.util.ArrayList; import java.util.ListIterator; public class Josephus { public static void main(String[] args) { pass(9, 5); // 注意这里的9为传递次数,要与报数次数区分开.即:传递次数 = 报数次数-1. } public static void pass(int m, int n) { int i, j, mPrime, numLeft; Arr…
JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5)语言    2 (6)人机交换    2 2:键盘功能键的认识和快捷键(掌握)    2 (1)功能键的认识    2 (2)快捷键    3 3:常见的DOS命令(掌握)    3 (1)常见的如下    3 (2)其他的几个(了解)    3 4:Java语言概述(了解)    4 (1)Jav…
约瑟夫环问题 问题描述: Josephus问题可以描述为如下的一个游戏:N个人编号从1到N,围坐成一个圆圈,从1号开始传递一个热土豆,经过M次传递后拿着土豆的人离开圈子,由坐在离开的人的后面的人拿起热土豆继续进行游戏,直到圈子只剩下最后一个人.例如:M=0,N=5,则游戏人依次被清除,5号最后留下:如果M=1,N=5,那么被清除的人的顺序是2,4,1,5,最后剩下的是3号. 如下是两种解题方法: 建立一个N大小的数组,存储N个人是否还在圈子内(0为在圈子内,-1为已经离开圈子),依次循环遍历整个…
问题描述 n个人围成一圈,号码为1-n,从1开始报数,报到2的退出,剩下的继续从1开始报数,求最后一个人的号码. 算法分析 最直观的算法是用循环链表模拟.从首节点开始,不断删除第二个节点,直到只剩一个节点为止.时间复杂度是O(2n). typedef struct josephusnode{ struct josephusnode *next; int item; }jnode; int listjosephus(jnode *head){ jnode *n = head; while(n->n…
博文链接:http://haoyuanliu.github.io/2016/04/18/Josephus/ 对,我是来骗访问量的!O(∩_∩)O~~ 约瑟夫问题(Josephus Problem)也称"丢手绢问题",是一道非常经典的算法问题,其解法涉及了链表.递归等算法和数据结构,本文主要分为如下三个内容: 使用C语言定义循环链表,通过遍历链表模拟事件处理过程: 使用数学方法,找出第n - 1步与第n步的关系,通过递归解决问题: 对第二种方法进行优化,加速递归过程,提高算法效率 循环链…
  笔者昨天看电视,偶尔看到一集讲述古罗马人与犹太人的战争--马萨达战争,深为震撼,有兴趣的同学可以移步:http://finance.ifeng.com/a/20170627/15491157_0.shtml .   这不仅让笔者想起以前在学数据结构时碰到的Josephus问题:   据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人找到,于是决定了一个自杀方式,41个人排成一…
本文都是转的,一个是转博客,一个是转贴吧,前者详细,后者"强,无敌"! 博客转: 以前就知道约瑟夫问题是模拟,今天我才发现一些约瑟夫问题可以使用数学解法得出!真是强悍啊!约瑟夫问题真是博大精深!当然报数长度不定的应该只有模拟了吧,能用数学做的都是简化过的约瑟夫问题. 下面整理如下: 1.问题描述:n个人(编号1~n),从1开始报数,报到m的退出,剩下的人继续从1开始报数.按顺序输出列者编号.数学解法复杂度:O(n). 下面的代码摘自雨中飞燕博客,这个公式推的太牛了,我还没看懂... #…
 一. 简述Josephus问题 N个人站成一环,从1号开始,用刀将环中后面一个人“消灭“”掉,之后再将刀递给下一个人,这样依次处理,最后留下一个幸存者. 二. 求解方法  1.  约瑟夫问题如果使用链表来求解比较麻烦,这里采用循环队列的处理. 约瑟夫问题可以等价为l连续地DeQueue()两次,然后再将第一次DeQueue()的值EnQueue()入队列尾,直到队列中只剩下一个元素. # 循环队列代码如下: #include <stdio.h> #include <stdlib.h&g…
mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.NullWritable; import org.apach…