约瑟夫问题(jsf)——java

题目描述

有m个人,其编号分别为1~m。按顺序围成一个圈,现在给定一个数n,从第一个人开始依次报数,报到n的人出圈,然后从下一个人开始,继续从1开始依次报数,报到n的人再出圈,…如此循环,直到最后一个人出圈为止。编程输出所有人出圈的顺序。

输入

输入格式
一行两个正整数m和n,之间用一个空格隔开,1<=m<100,1<=n<=32767。

输出

输出格式
输出m行,每行一个正整数,表示依次出圈的人的编号。

输入样例

8 5

输出样例
5
2
8
7
1
4
6
3

import java.util.*;
import java.math.*;
import java.util.ArrayList;;  
public class Main {
	int m; //总人数  
    int n; //第几个出局  
    ArrayList<String> circle = new ArrayList <String>();  
  
    public Main(int m, int n) {  
        this.m = m;  
        this.n =n;  
        //初始化环  
        for (int i = 1; i <= m; i++) {  
            circle.add(String.valueOf(i));  
        }  
    }  
  
    public void doAction() {  
        ArrayList<String> temp = null;  
        int k = n;//计数  
        while (true) {  
            temp = (ArrayList<String>)circle.clone();  
            if (temp.size() == 1) {  
                System.out.println(temp.get(0)+"\n");//最后一个出局的人  
                break;  
            }  
            for (int i =0; i < temp.size(); i++) { //循环  
                k--;  
                if (k == 0) {  
                    System.out.println(temp.get(i));//打印出局的人  
                    circle.remove(temp.get(i)); //出局  
                    k = n; //重新开始计数  
                }  
            }  
        }  
    }      
    public static void main(String args[]) {  
    	Scanner sc = new Scanner(System.in);
    	int men = sc.nextInt();
    	int k = sc.nextInt();
        Main test = new Main(men,k);  
        test.doAction();  
    }  
}
发布了10 篇原创文章 · 获赞 3 · 访问量 513

猜你喜欢

转载自blog.csdn.net/weixin_44546342/article/details/100972057
今日推荐