算法神马的,需要再加一个约瑟夫环问题

# 约瑟夫问题 不使用链表 纯计算方式得到:# 第一种方法的实现,只能从头开始报数,没有办法随机指定从什么位置开始# 如果只用YsfTest 可以用传 n 的方式 来求出第几轮被pop掉的序号

# 约瑟夫环的第一种实现:def YsfTest(count,doom,n):    if n ==1:        temp = (count + doom - 1)%count        return temp    else:        temp = (YsfTest(count - 1,doom,n - 1)+doom)%count        return temp

def Run(count,doom):    li = []    for i in range(1,count+1):        if i == count:            res = YsfTest(count,doom,i)            print(‘生存人员的编号:‘,res)        else:            res = YsfTest(count,doom,i)            li.append(res)    return li

# 第二种实现方案:# 首先先需要实例化一下,然后再进行函数的调用# 一个循环链表的思路,创建一个起始的first,结尾的tail指针# 如果从第几个孩子开始就 那么起始的first,结尾的tail指针就指向对应位置class Child(object):    first =None    def __init__(self,no=None,pNext=None):        self.no=no        self.pNext = pNext    def addChild(self,n):        cur =None        for i in range(n):            child = Child(i + 1)            if i ==0:                self.first = child                child.pNext = self.first                cur = self.first            else:                cur.pNext = child                child.pNext = self.first                cur = cur.pNext

    def showChild(self):  # 检测用的 可以不写        cur = self.first        while cur.pNext != self.first:            print(‘当前孩子的编号:%s‘%cur.no)            cur =cur.pNext        print("1当前孩子编号:%s"%cur.no)

    # m为doom报的数,k是从第几个孩子开始(就把first,tail指针移动相对应位置)    def countChild(self,m,k):        tail = self.first        while tail.pNext != self.first:            tail = tail.pNext        for i in range(k-1):            tail = tail.pNext            self.first = self.first.pNext        while tail != self.first:            for i in range(m-1):                tail = tail.pNext                self.first = self.first.pNext            self.first = self.first.pNext            tail.pNext = self.first        print(‘最终剩下孩子的编号:‘,self.first.no)

原文地址:https://www.cnblogs.com/yanhui1995/p/10798083.html

时间: 2024-10-05 05:07:15

算法神马的,需要再加一个约瑟夫环问题的相关文章

一个约瑟夫环问题

一个约瑟夫环问题 问题开始: 罗马人攻占了乔塔帕特,41个人藏在一个山洞躲过了这场浩劫.这41个人中,包括历史学家Josephus(约瑟夫)和特的一个朋友.剩余的39个人为了表示不向罗马人屈服,决定集体自杀.大家决定了一个自杀方案,所有这41个人围成一个圆圈,由第一个人开始顺时针报数,每报数为3的人就立刻自杀,然再由下一个重新开始报数,仍然是每报数为3的人立刻就自杀,....,直到所有的人都自杀身亡位置. 约瑟夫和他的朋友并不想自杀,于是约瑟夫想到一个计策,他们两个同样参与到自杀的方案中,但是最

hive -e 时转义需要再加一个\

hive窗口中使用转义字符: select split(concat_ws('|','123','456','789'),'\\|')from dual; 参考 http://jingyan.baidu.com/article/870c6fc32cf38eb03ee4be61.html 这种写法在hive -e 中执行时,需要改成: select split(concat_ws('|','123','456','789'),'\\\|')from dual;

补码(为什么按位取反再加一):告诉你一个其实很简单的问题

首先,阅读这篇文章的你,肯定是一个在网上已经纠结了很久的读者,因为你查阅了所有你能查到的资料,然后他们都会很耐心的告诉你,补码:就是按位取反,然后加一.准确无误,毫无破绽.但是,你搜遍了所有俯拾即是而且准确无误的答案,却仍然选择来看这篇毫不起眼的文章,原因只有一个,只因为你还没有得到你想要的东西. 因为你想要的,不是1+1=2,而是,1+1为什么等于2.当然,我们不讨论1+1的问题.我们讨论的,是补码. 你已经困惑了很久,你明明知道补码就是按位取反,然后加一,但是你想知道的,不是它怎么求滴,而是

Fragment的可见再加载的方法(真正的Fragment的OnResume和OnPause)

一 起因 我们在做应用的过程中,一个应用的界面可能是多个Fragment切换而成的,但是如果在每次应用启动的时候就去加载大量的网络数据(假设你的每个Fragment都需要加载网络数据,你也可以理解为初始化大量资源)肯定是不好的,能不能有一种方法可以在我们看到我们的Fragment时再去加载对应的Fragment的数据呢? 当然是有的. 二 解决 Fragment虽然有onResume和onPause的,但是这两个方法是Activity的方法,调用时机也是与Activity相同,和ViewPage

STP 3 - 生成树协议中4个guard 和 3个fast加一个filter

最近出的几个问题总是和生成树协议有问题,复习的时候顺带总结,温故而知新. 先上一个大牛总结的图(Vinny), 总结的非常好,你看完后面的文章再来看这张图就会会心一笑 - i got it ! 先讲下计时器,不论什么协议总是有些计时器,Hello数据包什么的.尤其到路由协议,怎么建立邻居关系,怎么通知拓扑改变,各种不同路由协议是各显神通. 所以在理解的时候最好要了解为什么这些协议需要计时器等等,这样我们就可以以不变应万变. STP Timer  (计时器的配置在当前交换机成为根桥时有用,因为默认

跟我一起学extjs5(40--增加一个自定义模块[1建立表和bean文件])

跟我一起学extjs5(40--增加一个自定义模块[1建立表和bean文件]) 经过上面的工作,一个独立模块的CRUD已经可以运行了,为了更好的可以看到其他自定义功能,我们做一个自定义的独立模块,这个模块中包括了各种的数据类型. 新增一个"销售合同"的独立模块,模块名称为Agreement,里面包括了20几个字段,把主要的字段类型都设置了,有字符串型,整型,浮点型,金额型,日期型,布尔型,百分比,还包括计算字段. 建立表的sql语句如下: /****** 对象: Table [dbo]

Bootstrap3基础 img-thumbnail 给图片加一个圆角的边框

礼悟:    公恒学思合行悟,尊师重道存感恩.叶见寻根三返一,江河湖海同一体.          虚怀若谷良心主,愿行无悔给最苦.读书锻炼养身心,诚劝且行且珍惜.              ide:visual studio 2017             browser:Firefox / Chrome   bootstrap:3.3.7 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8&qu

[UE4]快速移动,给单位向量加一个力

一.(Vector_End- Vector_Start ).Normalize,获取从起始位置指向目标位置的单位向量. 二.给单位向量乘以一个浮点数,即给向量加一个力,是往向量方向移动 每一帧往目标点移动多少距离,Tick的参数“Delta Seconds”表示渲染当前帧所花费的时间,再乘以速度,即得出每一帧需要加多少力给单位向量. 原文地址:https://www.cnblogs.com/timy/p/10463744.html

Java千问:Java语言中最大的整数再加1等于多少?

已知Java语言中int类型所能表示的最大整数为2147483647,请问以下代码执行结果是什么?一部分人都会认为这段程序压根就无法通过编译,也有人认为,这段程序能够通过编译,但在运行时会抛出异常,但更多的人面对这道题目根本就无从下手.那么正确答案是什么呢?首先告诉大家,这段程序能够顺利通过编译,并且在运行时也不会出现异常,运行的结果是在控制台上输出了数字-2147483648!而-2147483648正好是Java语言中int类型所能表示的最小整数.这个运行结果可能会让很多人感到大跌眼镜,运行