趋势科技笔试——约瑟夫问题

135 阅读1分钟

输入一个整数n,要求从1-n人中,第一次第1个人数后面的第一个人出列,第二次当前人后面的第2个人出列..依次出列,求最后一个出列人数的编号是多少

例子:n=11

出列顺序:2 5 9 4 1 3 8 10 11 6 7,所以答案输出7

package 趋势科技考试;

import java.util.ArrayList;
import java.util.Scanner;

public class Demo3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(josephProblem(n));
    }
    public static int josephProblem(int n) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 1; i <= n; i++) {
            list.add(i);
        }
        int i = 0;
        int count = 0;
        while (list.size() != 1) {
            count++;
            i = (i + count) % list.size();
        }
        return list.get(0);

    }
}