有15个红球和15个绿球排成一圈,从第一个球开始数,当数到第13个球的时就拿出此球,然后再从下一个球开始数,当在数到第13个球时又取出此球,如此循环进行,直至仅剩15个球为止,问怎样排取出全部红球。

这是一个典型的“约瑟夫环”问题。我们用数组来解决。

  1. 首先我们需要定义一个“箭头”用来在这个环中数,并淘汰人,并且在一圈结束后从新开始,形成一个视觉上的环。
  2. 解决出局之后的数字问题,最简单的方法是删除出局数字的位置。如果是链表就会显得非常的简单。
    在这里插入图片描述

package 课后习题;

public class zuoye56 {

public static void main(String[] args) {
	int []a=new int [30];
	int n=30,k=0,y=1;           //定义了总apple数,设置k为指向的箭头,y是设置的停止的标准
	for(int i=0;i<30;i++)
	   a[i]=i+1;
   do
    {
    	k=(k+12)%n;             //用来循环数的
    	System.out.println(y+"出局的第"+a[k]+"号苹果");
    	for(int j=k;j<n-1;j++)
    	a[j]=a[j+1];
    	n--;
    	y++;
    }
   while(y<=15);
}

}
上面就是我所写的代码只要在相应的位置放上红苹果就可以解决问题了。

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值