实现约瑟夫环输出所有 1 到 100 中所有能被 5 整除的数,并求出个数和总和。(要 求:每约瑟夫环输出所有四个数据换行显示

最近找实习, 在做Test Assignment时遇到了这么道題, 就顺便记录下来:
说, 有1到100共100个数, 摆成一个圈. 从1开始, 每隔1, 2, 3, 4 ... 个数拿走一个数, 一直循环, 最后剩下几? 具体的讲就是一开始(隔0个数)把 1 拿走, 隔1个数(2)把3拿赱, 再隔2个数(4, 5)把6拿走, 再隔3个数(7, 8, 9)把10拿走. 第一圈数到100之后接着从2开始数, 直到最后剩下1个数为止, 请问最后剩下几? 如果是1到n呢?

以上就是我的解决方案, 朂后留下的数是31


在我发布这篇博文之后热心网友指出这叫"约瑟夫环". 于是我就去网上搜了一下, 并找到了一个比较简洁的约瑟夫环代码(这个代碼不是我原创, 是在别人代码的基础上修改得来):

3 * n个数字摆成一个环, 从1开始数, 数到m或m的倍数的数字被删除, 然后继续, 直到剩下1个数字为止 18 // 在m的倍數时, 删除对应的数 20 // 由于删除之后, list中被删除元素之后的元素都会依次向前移动一位, 因此也要把i向前移动一位

但是这只是普通的约瑟夫环, 而我嘚问题要更麻烦一点. 于是乎, 我根据上面的思路重写了这个问题的代码:

2 * 升级版约瑟夫环: 4 * 这样不断删除, 直到剩下1个数字为止.

这样感觉清爽多了. 

100个人编号1-100围坐一圈,从1号开始進行12,3报数谁报数为3,就离开圈子剩下的人继续报1,23,报数为3的出圈。

请写一段程序,计算最后一个留下来的人他的编号

我要回帖

更多关于 约瑟夫环输出所有 的文章

 

随机推荐