每日一题.每日一练 .15圆圈中最后剩下的数字(为什么没有14,因为几何比约瑟夫环难多了,现在还没明白)(“铡刀思想”,或者叫咔擦思想)

这篇文章是我通过灵感所写的是一种全新的理解约瑟夫环的方法,希望能帮到一些还没有理解的朋友。所以我会尽力详细的讲述这篇文章。

面试题62. 圆圈中最后剩下的数字
0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。

例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。

示例 1:

输入: n = 5, m = 3
输出: 3

示例 2:

输入: n = 10, m = 17
输出: 2

在这前我们先来了解一下约瑟夫环问题:

17世纪的法国数学家加斯帕在《数目的游戏问题》中讲了这样一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是非教徒。(还有另一个版本但是他太长了==)

如果死去的人灵魂还能占着空位,这题会变的非常简单,如果我们每次扔进海里一个就重新从开头数数,这题也会非常简单,然而并不能,所以约瑟夫环的问题就有两个:
1:我们没有固定的环长,意味着我们数着的数肯定不成倍数增加(也就是没有什么明显的规律):
2:没有固定的开始地点,这个人被扔海里接着数后面的,所以我们之后的会受到环长的影响。

感谢在我尝试理解约瑟夫环的过程中,一位大佬的文章里提到了

每当一个人被推进海里时,所有的索引值会前进m,

也就是我们每次数到就要杀人的那个数,所有的索引值都要前进m,为什么,我们不是死了一个人吗,为什么索引值前进了那么多呢”但是,随着思考我突然冒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值