常用算法:C#约瑟夫环问题

约瑟夫环问题,即设有n个人坐成一个圈,从某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人再出列,如此循环,直到所有人都出列为止。最后按出列顺序输出。代码如下:

//从第start人开始计数,以alter为单位循环记数出列,总人数为total
public int[] Jose(int total, int start,int alter)
{
    int j, k = 0;
    //count数组存储按出列顺序的数据,以当结果返回
    int[] count = new int[total + 1];
    //s数组存储初始数据
    int[] s = new int[total + 1];
    //对数组s赋初值,第一个人序号为0,第二人为1,依此下去
    for (int i = 0; i < total; i++)
    {
        s[i] = i;
    }
    //按出列次序依次存于数组count中
    for (int i = total; i >= 2; i--)
    {
        start = (start + alter - 1) % i;
        if (start == 0)
            start = i;
        count[k] = s[start];
        k++;
        for (j = start + 1; j <= i; j++)
            s[j - 1] = s[j];
    }
    count[k] = s[1];
    //结果返回
    return count;
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, int
, 次序 文件 c#
, count
, c语言 报数 算法
, s代码顺序问题
, total
, start
, 数据结构 约瑟夫环
, c#算法数组
, 约瑟夫问题
, 约瑟夫环
约瑟夫
,以便于您获取更多的相关知识。

时间: 2025-01-02 12:11:22

常用算法:C#约瑟夫环问题的相关文章

利用简洁的C语言代码解决跳台阶问题与约瑟夫环问题_C 语言

跳台阶问题 题目: 一个台阶总共有 n 级,如果一次可以跳 1 级,也可以跳 2 级. 求总共有多少总跳法,并分析算法的时间复杂度. 分析: 也是比较基础的题目,通过递归可以方便的求解 代码实现如下(GCC编译通过): #include "stdio.h" #include "stdlib.h" int function(int n); int main(void) { int tmp; tmp = function(5); printf("%3d\n&q

PHP常用算法和数据结构示例(必看篇)

实例如下: </pre><pre name="code" class="php"><?php /** * Created by PhpStorm. * User: qishou * Date: 15-8-2 * Time: 上午9:12 */ header("content-type:text/html;charset=utf-8"); $arr = array(3,5,8,4,9,6,1,7,2); echo im

php解决约瑟夫环示例

 这篇文章主要介绍了php解决约瑟夫环示例,需要的朋友可以参考下 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环.又称"丢手绢问题".)   猴子一群,都带着号码的,站好了一圈,数到m的枪毙,剩下的接着数.如此往复,死剩下的一个就疯了    代码如下: <?php function killMonkeys($monkeys, $m){     $k = $m;     while (count($monkey

应用-C/C++ 约瑟夫环问题

问题描述 C/C++ 约瑟夫环问题 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为1的人开始报数,数到k的那个人出列:他的下一个人又从1开始报数,数到k的那个人又出列:依此规律重复下去,直到圆桌周围的人全部出列. n=10,k=3 #include<stdio.h> typedef struct { int data[10]; int front; int rear; }CirQueue; void InitQueue(C

约瑟夫环的问题

题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指定一个数m,让编号为1的小朋友开始报数.每次喊到m的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续1...m报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到JOBDU名贵的"名侦探柯南"典藏版

php 常用算法和时间复杂度

本篇文章是对php中的常用算法以及时间复杂度进行了详细的分析介绍,需要的朋友参考下   按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3) 复制代码 代码如下: //二分查找O(log2n) function erfen($a,$l,$h,$f){ if($l >$h){ return false;} $m = intval(($l+$h)/2); if ($a[$m] == $f){ r

php计算两个整数的最大公约数常用算法小结

 这篇文章主要介绍了php计算两个整数的最大公约数常用算法,实例总结了求最大公约数的三种常用方法,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php计算两个整数的最大公约数常用算法.分享给大家供大家参考.具体如下:   代码如下: <?php //计时,返回秒 function microtime_float () { list( $usec , $sec ) = explode ( " " , microtime ()); return ((float)

python超简单解决约瑟夫环问题

  本文实例讲述了python超简单解决约瑟夫环问题的方法.分享给大家供大家参考.具体分析如下: 约瑟环问题大家都熟悉.题目是这样的.一共有三十个人,从1-30依次编号.每次隔9个人就踢出去一个人.求踢出的前十五个人的号码: 明显的约瑟夫环问题,python实现代码如下: ? 1 2 3 4 5 6 a = [ x for x in range(1,31) ] #生成编号 del_number = 8 #该删除的编号 for i in range(15): print a[del_number]

方法-循环列表求解约瑟夫环游戏用C++

问题描述 循环列表求解约瑟夫环游戏用C++ 简单的循环链表求解约瑟夫环游戏,传说有30个旅客同城做一条船,因为严重超载,加上风浪大作,危险万分.因此船长告诉大家,只有将乘客一半入海中,其他的人才能幸免遇难.无奈,大家只好同意这种方法,并议定30个人围成一圈,由第一个数起,依次报数,数到第九人,便把他扔入大海,然后再从他的下一个人数起,数到第九人,再将他扔入大海,如此循环地进行,直到剩下15个乘客为止.问那些位置将是被扔下大海.,将30个改为任意输入的正整数N,报数上限也改为一个任意的正整数k.