java用list實現約瑟夫環問題

1.約瑟夫環:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號爲k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。
2.代碼如下:
package com.timeng;

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

public class Yue {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入總人數:");
int totalNum = scanner.nextInt();
System.out.print("請輸入報數的大小:");
int cycleNum = scanner.nextInt();
yuesefu(totalNum, cycleNum);
}

public static void yuesefu(int totalNum, int countNum) {
// 初始化人數
List<Integer> start = new ArrayList<Integer>();
for (int i = 1; i <= totalNum; i++) {
start.add(i);
}
//從第K個開始計數
int k = 0;
while (start.size() >0) {
k = k + countNum;
//第m人的索引位置
k = k % (start.size()) - 1;
// 判斷是否到隊尾
if (k < 0) {
System.out.println(start.get(start.size()-1));
start.remove(start.size() - 1);
k = 0;
} else {
System.out.println(start.get(k));
start.remove(k);
}
}
}
}
發佈了38 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章