Java编程题目-1:约瑟夫环问题

博客探讨了Java编程中的约瑟夫环问题,通过数组模拟实现每隔一定数删除一个元素,直至只剩最后一个。文章提供了思路和代码实现,并指出难点在于数组下标的循环控制和已删除元素的处理。作者认为现有代码的条件控制可以改进。
摘要由CSDN通过智能技术生成

有一个数组a[1000]存放0–1000;要求每隔二个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。

以8个数为例:
{0,1,2,3,4,5,6,7} 0–>1–>2(删除)–>3–>4–>5(删除)–>6–>7–>0(删除),如此循环直到最后一个数被删除。
这个在百度文库中查了下被称为约瑟夫环问题
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后[1] 结果+1即为原问题的解。
先来说下我的思路:
对数组进行循环遍历,设置一个删除用的计数器,计数器从0开始累加,在循环遍历的同时累加到2的时候,进行数组元素的删除操作(直接将数组元素的值赋为-1),同时还要考虑数组下标到末尾时进行移动问题(此时还要考虑判断计数器是否已经到2,也就是需要进行删除元素操作了?)、已经被删除过的元素不再遍历问题(赋值为-1的元素不再遍历,防止计数器计数出现偏差)等。
自己动手试了下,代码如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值