P1996_约瑟夫问题(JAVA语言)_可能是最简单的解法了!

思路:使用队列模拟。

判断是否为出圈的数。如果不是,把数加入队列尾部;如果是,输出并删除。

题目背景

约瑟夫是一个无聊的人!!!

题目描述

n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.

输入输出格式

输入格式:

 

n m

 

输出格式:

 

出圈的编号

 

输入输出样例

输入样例#1: 复制

10 3

输出样例#1: 复制

3 6 9 2 7 1 8 5 10 4

说明

m, n \le 100m,n≤100

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		int m=in.nextInt();
		Queue<Integer> q=new LinkedList<Integer>();
		for(int i=1;i<=n;i++)
			q.add(i);
		int k=0;
		while(q.size()>0)//判断队列中是否还有元素
		{
			if(++k%m==0)//报数到m,说明该数字需出圈
				System.out.print(q.remove()+" ");//输出删除该数
			else
				q.add(q.remove());//如果是非出圈数,将该数删除并加入队列尾部
		}
	}

}

 

全部评论

相关推荐

10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务