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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值