马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

约瑟夫环算法

  [复制链接]
查看6353 | 回复5 | 2018-1-30 17:14:53 | 显示全部楼层 |阅读模式
       前段时间在逛百度的时候,发现了约瑟夫环这个算法;当时刚好忙完了,左右没事就花了点时间去研究了下这个算法,研究了才知道这算法还真点研究价值。
      话说,在犹大人和罗马的战争期间,约瑟夫和其他40个犹大人反判者被罗马军队困在一个山洞中;这些犹大人反判者宁愿自己自杀也不想成为罗马的俘虏,于是他们站成了一个圆,从其中的某个人开始数每数到三就要被杀掉,直到所有人死光。但约瑟夫和他的一个朋友觉得自杀没意义,并不想死,于是他们很快就算出他和他朋友应该站在什么位置,使他们成为最后两个人,并最终活下来。
     从上面的事件中我们可以知道两点信息:
     1、人员的总数:40;
     2、每次数到三的人都要被杀掉(数到数值):3;     好,现在我们就来解决这一题,然后写出成一个算法:
     首先,我们先把每个人分配个编号,第一个数数的为1号,第二个为2号,以些类推一直到40号;然后我们可以慢慢排除要死掉的人,剩下的最后两位数就是我们最终的解(13,28)。
    方法操作思路出来了,我们就可以对算法进行实现了,代码如下:
  
[C#] 纯文本查看 复制代码
 /// <param name="strArr">源数组(1-40)</param>
        /// <param name="Num">数到几移除(3)</param> 
        /// <param name="StartNum">开始数(1)</param>
        /// <returns></returns>
        public ArrayList GetArrList(ArrayList strArr, int Num, int StartNum)
        {

            ArrayList ArrSource = new ArrayList();
            int nCount = 1; 
            int index = StartNum - 1;
            while (strArr.Count > 0)
            {
                //数到移除数(3)
                if (nCount == Num)
                {
                    ArrSource.Add(strArr[index]);
                    strArr.Remove(strArr[index]);
                    nCount = 1;
                }
                else
                { 
                    nCount++;
                    index++;
                }
                //数到最后一个后回到每一个。
                if (index == strArr.Count)
                {
                    index = 0;
                }
            }
            return ArrSource;
        }




ibcadmin | 2018-1-30 17:28:25 | 显示全部楼层
6666666666  不过你这返回的应该是自杀的顺序,还要取返回值的最后两个值

点评

是自杀的顺序啊,返回数组的最后位就是了啊  详情 回复 发表于 2018-1-31 09:03
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
剑弑 | 2018-1-31 09:03:15 | 显示全部楼层
ibcadmin 发表于 2018-1-30 17:28
6666666666  不过你这返回的应该是自杀的顺序,还要取返回值的最后两个值

是自杀的顺序啊,返回数组的最后位就是了啊
剑弑 | 2018-2-1 10:01:12 | 显示全部楼层
如想看别一种实现方式可以到 http://www.cnblogs.com/ljhboke/p/8397559.html 查看
ibcadmin | 2018-2-1 11:17:07 | 显示全部楼层
顶一哈
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
vxvx123 | 2019-9-4 20:57:05 | 显示全部楼层
顶顶顶顶顶顶顶顶顶
[url=http://jbk.39.net/yiyuanzaixian/bjzkbdfyy/]北京治疗白癜风最好的医院[/url]
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则