有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);
}

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

猜你喜欢

转载自blog.csdn.net/weixin_44914079/article/details/89284228