首页 > 编程 > Java > 正文

约瑟夫问题(java实现)

2019-11-08 02:52:56
字体:
来源:转载
供稿:网友

约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.)在下面的代码中,解决的是n个人排成一圈,这n个人的序号分别是0 ~ n-1, 给定一个数m,从头开始报数,没报到m-1时,这个人出列,然后下个人从0开始报数,知道最后一个人留下,求最后一个人的序号。java实现代码如下:

 package yao.demo;import java.util.*;public class Yuesefu {	public static int yuesefu(int n, int m){		if(n == 0 || m == 0)			return -1;		if(n == 1 && m == 1)			return -1;		List<Integer> alist = new ArrayList<Integer>();		for(int i = 0; i < n; i++)			alist.add(i);		//初值设为-1,		int index = -1;		while(alist.size() > 1){			index = (index+m)%alist.size();			alist.remove(index);			//从上一个位置开始计数			index--;		}		return alist.get(0);			}		public static void main(String[] args) {		Scanner s = new Scanner(System.in);		System.out.PRint("请输入总人数:");		int totalNum = s.nextInt();		System.out.print("请输入报数大小:");		int cycleNum = s.nextInt();		s.close();		int a = yuesefu(totalNum, cycleNum);		System.out.println("最后一个人的序号:" + a);	}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表