Description 题目:n个数字(1,2,3…,n)形成一个圆圈,从数字1开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。 Description 题目:n ...
分类:
其他好文 时间:
2017-04-17 14:18:45
阅读次数:
136
约瑟夫问题大致描述:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,求最后一个出列人的编号。 算法1:模拟 链表维护每个人的相对位置,每次模拟报 ...
分类:
其他好文 时间:
2017-04-08 18:27:54
阅读次数:
160
以下摘自:http://blog.163.com/soonhuisky@126/blog/static/157591739201321341221179/ http://blog.csdn.net/haoni123321/article/details/7178748 为了讨论方便,先把问题稍微改变 ...
分类:
其他好文 时间:
2017-04-05 01:28:24
阅读次数:
216
首先让我们引入一个公式:f(n,k)=(f(n-1,k)+k)%n 约瑟夫环 这篇文章讲得很好。。 我稍微谈谈自己的看法。 这其实就是一个递推的过程: 首先f(n, k)表示的是n个人,数到k的人退出游戏;然后这个公式 f(n-1,k)=f(n,k)-k>=0?f(n,k)-k:f(n,k)-k+n ...
分类:
其他好文 时间:
2017-04-02 13:52:06
阅读次数:
156
约瑟夫环问题: package com.zb.test; public class Yuesefu { public static void main(String[] args) { //500个人数组 boolean[] b = new boolean[500]; for(int i = 0;i ...
分类:
编程语言 时间:
2017-03-31 00:38:40
阅读次数:
144
提示:用环形链表实现 对于这个题目其实就是用c语言的循环链表实现一个约瑟夫环。我们可以定义一个循环链表,将这n个人加入到链表中,然后定义三个节点指针在链表上循环,移动跨度为3,利用链表的循环功能每次删除第三个节点,这边要注意的一个问题就是你定义的是3个指针,且在循环中他们彼此也都是有 ->next关 ...
分类:
编程语言 时间:
2017-03-27 17:48:44
阅读次数:
195
1、随机化数组问题就是对已有的数组进行乱序排列,使之随机的,毫无规律;(1)、代码实现#include<stdio.h>
#include<time.h>
#include<stdlib.h>
voidshowArray(int*a,intcount);
voidrandom_1(int*a,intcount);
voidrandom_1(int*a,intcount){
inti;
inttm..
分类:
编程语言 时间:
2017-03-24 10:56:39
阅读次数:
176
问题描述:已知n个人,分别以编号1,2,3,...n表示,围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,求最后一个出列人的编号。 一般性递归算法思考:n个人围成一圈,从k开始以m为步长报数 ...
分类:
其他好文 时间:
2017-03-17 19:47:10
阅读次数:
144
N个人围成一圈顺序编号,从1号开始按1、2、3顺序报数,报3者退出圈外,其余的人再从1、2、3开始报数,报3的人再退出圈外,依次类推。请按退出顺序输出每个退出人的原序号。要求使用环行链表编程。 模拟题。 ...
分类:
其他好文 时间:
2017-03-06 21:04:03
阅读次数:
146
题目大意: 输入初始人数编号为1~n,以及初始密码m,输出出局序列. 解法一:用线段树可解. Segtree节点存储左右区间和该区间下包含的人数. void Build(int p,int left,int right)表示从编号为p,区间为[l,r]的节点开始向下建树. int Update(in ...
分类:
其他好文 时间:
2017-02-21 15:45:55
阅读次数:
184