Java语言解决约瑟夫环问题(ArrayList实现)

思想:先用一个ArrayList  arr存储所有的数字,然后删除指定的数字之后将依次将之后的数和之前的数存储到一个新的ArrayList temp中,将temp赋值给arr,重复上述操作,直到所有的数都被删除为止。主要要解决的问题就是准确的删除指定的数以及将剩下的数正确的存储到另外的一个ArrayList中;需要进行一些数学推导。

代码如下:

import java.util.ArrayList;
import java.util.Iterator;

public class Baoshu {
public  static void baoshu(int n,int m)
{
int num = n;
ArrayList arr = new ArrayList();
for(int i=1;i<=n;i++)
{
arr.add(i);
}
Iterator it = arr.iterator();
while(it.hasNext())
{
ArrayList temp =Baoshu.arrays();
if((num==1))
{
System.out.println(arr.get(0));
num–;
return;
}
else if(m<num)
{
System.out.println(arr.get((m%num)-1));
arr.remove((m%num)-1);
for(int i = (m%num)-1;i<num-1;i++)
{
temp.add(arr.get(i));
}
for(int i =0;i<(m%num)-1;i++)
{
temp.add(arr.get(i));
}
System.out.println(temp);
arr=temp;
num–;
}
else if(m%num==0)
{
System.out.println(arr.get(num-1));
arr.remove(num-1);
for(int i=0;i<num-1;i++)
{
temp.add(arr.get(i));
}
System.out.println(temp);
arr=temp;
num–;
}
else if(m>num)
{

System.out.println(arr.get(m%num-1));
arr.remove(m%num-1);
for(int i =m%num-1;i<num-1;i++)
{
temp.add(arr.get(i));
}
for(int i =0;i<m%num-1;i++)
{
temp.add(arr.get(i));
}
System.out.println(temp);
arr=temp;
num–;
}
}
}
public static ArrayList arrays()
{
return new ArrayList();
}

public static void main(String[] args) {
// TODO Auto-generated method stub
baoshu(10,10);
}
}

运行结果:

10
[1, 2, 3, 4, 5, 6, 7, 8, 9]
1
[2, 3, 4, 5, 6, 7, 8, 9]
3
[4, 5, 6, 7, 8, 9, 2]
6
[7, 8, 9, 2, 4, 5]
2
[4, 5, 7, 8, 9]
9
[4, 5, 7, 8]
5
[7, 8, 4]
7
[8, 4]
4
[8]
8

    原文作者:约瑟夫环问题
    原文地址: https://blog.csdn.net/u013121385/article/details/49785383
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞