首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用特定步骤重新绘制列表元素

使用特定步骤重新绘制列表元素
EN

Stack Overflow用户
提问于 2022-11-25 12:23:08
回答 1查看 41关注 0票数 0

我正在处理以下问题:

圆桌上的

站着numberOfDishes的盘子,按的顺序编号,从1numberOfDishes依次是。一个男人想要按照以下的规则尝试所有的菜:

他会把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中获取每个食用的菜号,并将其添加到我的列表中。你知道怎么解决这个问题吗?谢谢!

代码语言:javascript
复制
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;
    }
}

结果逻辑:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2022-11-25 12:38:37

请考虑以下几点:

要从菜盘列表中删除的元素的

  • 索引--如果而不是在每次迭代时由1递增(就像在您共享的代码中所做的那样),而是根据给定的everyDishNumberToEat进行更改。也就是说,我们需要用窗帘一步反复地浏览一遍菜肴列表,索引需要做这样的修改:

代码语言:javascript
复制
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更适合用于这个目的。

这就是它的实现方式:

代码语言:javascript
复制
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()

代码语言:javascript
复制
public static void main(String[] args) {
    System.out.println(determineDishOrder(10, 3));
}

输出:

代码语言:javascript
复制
[3, 6, 9, 2, 7, 1, 8, 5, 10, 4]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74572748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档