Joseph_Circle(约瑟夫环)

本文介绍了一种经典的计算机科学问题——约瑟夫环,并提供了一个详细的Java实现方案。通过具体的示例,展示了如何利用ArrayList来模拟约瑟夫环的过程,并逐步移除符合条件的元素,直至所有元素都被移除。

 

//约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,

//数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依次规律重复下去,直到圆

//桌周围的人全部出列。

//Java源程序如下

 

package Joseph_Circle;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class Joseph_circle {

  public static void Joseph(int total,int N,int count)

  {

  //初始化人数

    List<Integer> start = new ArrayList<Integer>(); //Java中的泛型,即ArrayList只能存放整型数

    for(int i=1;i<=total;i++)

    {

      start.add(i);

    }

 

    //从第k个开始计数

    int k=N;

    while(start.size()>0)

    {

      k = k + count - 1; //从第3个人开始数,数5个人,应该是第7个人

      //第m个人的位置

      k = k % (start.size()) - 1;

      //判断是否到队尾

      if(k<0)

      {

        System.out.print(start.get(start.size()-1) + "  ");

        start.remove(start.size() - 1);

        k=0;

      }

      else

      {

        System.out.print(start.get(k) + "  ");

        start.remove(k);

      }

    }

  }

  public static void main(String[] args)

  {

    Scanner reader=new Scanner(System.in);

    System.out.print("请输入总人数:");

    int totalNum=reader.nextInt();

    System.out.print("从第几个人开始报数:");

    int start_N=reader.nextInt();

    System.out.print("请输入报数的大小:");

    int cycleNum=reader.nextInt();

    Joseph(totalNum,start_N,cycleNum);

 

    reader.close();

  }

 

}

 

 

运行结果:

 

 

转载于:https://www.cnblogs.com/duanqibo/p/11193050.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值