问题描述:n个人排成一圈.从某个人开始,依次报数,数到m的人被杀死.下一个人重新从1开始报数,数到m的人被杀死.直到剩下最后一个人. 解决思路:从数学角度去看,每一次报数决定谁去死是一个n.m的求余数过程.从程序角度看,玩家和编号一一对应,每一次报数玩家减少一个,编号重新排列. 程序: 1.首先声明相关变量 $childAmount = 6; //总人数 $endNumber = rand(1,6); //死亡编号取随机值 $gameNumber = 0;//游戏次数 $childArray =…
问题: 丢手帕游戏是约瑟夫问题的一个变种,游戏很简单,N个小孩围成一个圈,标号为1到N,从编号为m的小孩开始报数,报到第L个小孩退出游戏,然后下一个小孩继续从1开始报数,数到第L个小孩退出游戏,如此循环,直到剩下最后一个小孩是胜利者. 使用环形链表方式解决问题: 代码如下: /** * 描述: * @作者:niexiaohui * @创建时间:2016年12月27日 * @修改记录: */ public class Test { public static void main(String[]…
/** * * @author Administrator * 功能:丢手帕问题 */ package com.litao; public class Demo4 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub CycLink cycLink = new CycLink(); cycLink.setLen(5); cycLink.createLin…
一.问题描述:     n个人围成一个圈,编号为1~n,从第一号开始报数,报到3的倍数的人离开,一直数下去,直到最后只有一个人,求此人编号. 二.问题提示:  使用一维数组,数组元素初始为1,从1开始把数字放进数组空间,若数组元素为3的倍数,则把其置0,循环下去直到计数器(counter)减为1,则跳出循环并输出其数组下标 import java.util.Scanner; public class Test { /** * @param args */ public static void m…
public class Solution { // 左神解法,本题本质还是报数为m-1的倍数的人死.求最后一个活着的人是初始时候的哪个人       /* 报数(A) 实际人员编号(B)        0 0 . . . . n-1 n-1 n 0 则可知B = A % n 同时,当杀了一个人之后,杀人前记为before,杀人后记为after. before               after k (k < n)            (没有了,因为被杀后变为n-1个人了) k+1 0 .…
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉. def fnA(p, personNum, cnt): times = cnt // personNum + 1 temp = []; for t in range(times): temp = temp + p p2 = p[:] p2.remove(temp[cnt-1]) return p2 def fnB(p, cnt): pa = p[:cnt-1] pb = p[cnt:]…
N个孩子围成一圈报数,报到M的退出,剩下的再从1继续报数,报到M的再退出,一直持续到只剩一个人,问剩下的是哪个? package { import flash.display.Sprite; public class dsp extends Sprite { public function dsp() { //总人数 var n:Number=9; //将所有放进数组 var arr:Array=[]; for (var i:int = 1; i <= n; i++) { arr.push(i)…
Josephu问题为:设编号为1,2,...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列.例如当n = 8, m =4, k =3时,出列的顺序依次为6, 2, 7, 4, 3, 5, 1, 8. 解题:用一个不带头结点的循环链表来处理Josephu问题,先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点的人从链表中删…
问题描述: 约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到k的那个人出列:他的下一个人又从1开始报数,数到k的那个人又出列:依此规律重复下去,直到圆桌周围的人全部出列. print ("version: python3.4") def josephus(n,k): index=0 people=list(xrange(1,n+1)) while True: if len(people)==1: break index=(in…
这还是自己3年前(2011年)整理的笔记,记得当时那会儿自己对Linux还特别的憧憬,也很喜欢韩老师的讲课风格,边看边做笔记乐此不彼,现在开通了技术博客,所以把当年的笔记也放上来和大家分享.同时推荐没有Linux基础又看不下去书的童鞋们也去看看韩老师的视频,入门还是非常不错滴. 一.linux的两个发展方向: 1.linux 系统管理员 2.linux 程序员{linux 软件工程师(PC) linux 嵌入式开发(单片机,芯片)} 二.我个人认为学习linux的流程 1.linux 平台上的开…