JAVA编写小孩手拉手问题

有1000个小孩,每个小孩有一个编号,分别是1#-1000#,按照编号顺序从1#小孩开始依次手拉手,最后1000#小孩和1#小孩手拉手,围成一圈。现在从1#小孩开始1、2、3...报数,凡是报到7的倍数的小孩退出,最终会剩下一个小孩,请问是几号小孩。

public class Baoshu {
public static void baoshu(int n,int m)//定义一个方法,传参n为人数,当n是m的倍数时,m退出
{
	boolean []children=new boolean[n];//定义长度为n的boolean数组
	for(int i=0;i<children.length;i++)
	{
		children[i]=true;//给数组中所有小孩赋初值为TRUE
	}
	int cnt=n;//圈中现有人数
	int num=0;//小孩所报数
	int index=1;//小孩的位置
	while(cnt>1)//小孩<1时结束判断
	{
		if(children[index]==true)//每次只判断在圈中的小孩,即状态为true
		{
			num++;//报数每次加一
			if(num%m==0)//如果所报数对m取余为0,该小孩退出,状态为false
			{
				children[index]=false;
				cnt--;//人数减一
			}
		}
		
		index++;//小孩的位置加一
		if(index==children.length)//如果小孩位置==数组长度
		{
			index=0;//小孩位置又从初值开始增加
		}
		
	}
	for(int i=0;i<children.length;i++)//数组输出
	{
		if(children[i]==true)
		System.out.println(i);
	}
}

	public static void main(String[] args) {
	baoshu(6,2);

	}

}

传参数为(6,2)时,即6个小孩报数,报到2的倍数的人退出。运行结果为:(剩下最后一个人为第5个人)


当传参为(1000,7)时,运行结果为:第404个人


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值