数三退一问题

500个人围成一圈 ,  从第一个人开始数 1,2,3  数到3的人退出,继续往下,后面的人继续数1,2,3 数到3的人就退出 , 于是这样,最后剩下一个人 这个人是几号呢?

 老师讲了不同算法。

算法之一:

根据老师的敲的,自己没有形成独立的思路。。。。。

public class OnlyOneTest {
	public static void main(String args[]){
		boolean[] array = new boolean[500];
		for(int i=0; i<array.length; i++){
			array[i] = true;
		}
		
		int leftCount = array.length ;  //剩下的总数
		int countNum = 0; //每三个为一轮
		int current = 0;  //当前指向数组的哪一个
		
		while(leftCount > 1){
			if(array[current] == true){
				countNum++;
				if(countNum == 3){
					array[current] = false;
					countNum = 0;
					leftCount --;
				}
			}
			current++;
			
			if(current == array.length){
				current = 0;
			}
			
		}
		
		for(int i = 0; i < array.length ; i++){
			if( array[i] == true){
				System.out.println(i);
			}
		}
			
	}
}

这样运行出来结果是435  但是我用小数字 1--10 实验了下 最后应该是4剩下来但是用此程序运行则是3剩下来  所以在最后 SYSO的地方自己改成了 i+1...  因为正确答案应该是436吧。。。。。

----------------------------------------------分割线------------------------------------------------------------------------------------------------------------------------------------------------------

额 老师说了,运行出来下标是435  也就是说是第346个数,,,,,,,,嗯 自己浅陋了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值