我正在处理以下问题:
圆桌上的
站着
numberOfDishes的盘子,按的顺序编号,从1到numberOfDishes依次是。一个男人想要按照以下的规则尝试所有的菜:
他会把everyDishNumberToEat的每一道菜都吃掉,直到他吃完所有的东西为止。
输入:
numberOfDishes = 10 everyDishNumberToEat =3道菜: 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;
}
}结果逻辑:
int step = everyDishNumberToEat - 1;
int i = 0;
while (!dishes.isEmpty()) {
i = (i + step) % dishes.size();
int n = dishes.remove(i);
result.add(n);
}
return result;发布于 2022-11-25 12:38:37
请考虑以下几点:
要从菜盘列表中删除的元素的
1递增(就像在您共享的代码中所做的那样),而是根据给定的everyDishNumberToEat进行更改。也就是说,我们需要用窗帘一步反复地浏览一遍菜肴列表,索引需要做这样的修改:i = (i + (everyDishNumberToEat - 1)) % dishes.size();
// modulus is need because we need to move the list multiple times,
// until there would be no dishes left (and we don't want
// to exceed the current size of the list)while-loop更适合用于这个目的。这就是它的实现方式:
public static List<Integer> determineDishOrder(int numberOfDishes, int everyDishNumberToEat) {
List<Integer> dishes = new LinkedList<>();
List<Integer> result = new ArrayList<>();
for (int i = 1; i <= numberOfDishes; i++) {
dishes.add(i);
}
int step = everyDishNumberToEat - 1;
int i = 0;
while (!dishes.isEmpty()) {
i = (i + step) % dishes.size();
int n = dishes.remove(i);
result.add(n);
}
return result;
}main()
public static void main(String[] args) {
System.out.println(determineDishOrder(10, 3));
}输出:
[3, 6, 9, 2, 7, 1, 8, 5, 10, 4]https://stackoverflow.com/questions/74572748
复制相似问题