【发布时间】:2022-11-27 04:46:49
【问题描述】:
我正在解决以下问题:
圆桌上摆着
numberOfDishes编号为升序从1到numberOfDishes。一个人想按照以下规则尝试所有的菜:他会吃完
everyDishNumberToEat的每道菜,直到他吃完为止 一切。输入:
numberOfDishes = 10 everyDishNumberToEat = 3 dishes: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]输出:
[3, 6, 9, 2, 7, 1, 8, 5, 10, 4]这是我的代码,我试图从
LinkedList获取每道菜的编号并添加到我的列表中。你知道如何解决这个问题吗?谢谢!public class DishOrderDeterminer { public List<Integer> determineDishOrder(int numberOfDishes, int everyDishNumberToEat) { LinkedList<Integer> linkedList = new LinkedList<>(); List<Integer> list = new ArrayList<>(); for (int i = 1; i <= numberOfDishes; i++) { linkedList.add(i); } for (int i = 0; i < numberOfDishes; i++) { int n = linkedList.remove(everyDishNumberToEat+i); list.add(n); } return list; } }
【问题讨论】:
-
这是 Josephus 问题的一个实例,即discussed at length on Wikipedia。
-
要将列表视为循环列表,请将索引取当前列表长度的模。
标签: java arrays algorithm loops linked-list