Java 用队列计算序列

Java Calculate Sequence with Queue

我有以下数字序列:

S1 = N, S2 = S1 + 1, S3 = 2*S1 + 1, S4 = S1 + 2, S5 = S2 + 1, S6 = 2*S2 + 1, S7 = S2 + 2 ... 

使用 ArrayDeque<E> class,我必须编写一个程序来打印给定 N 的前 50 个成员。 示例:

input 2
output 2 3 5 4 4 7 5 6 11 7 5 9 6 ...

这是我的代码。问题是我无法更新下一个 S

import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner;

public class p04 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int numN = scanner.nextInt();
        scanner.close();
        int counter = 1;
        int nexS = numN;
        Queue<Integer> fifty = new ArrayDeque<>();
        for (int i = 0; i < 50; i++) {
            if (i == 0){
                fifty.add(numN);
            }else {
                if (counter == 1){
                    counter++;
                    numN = nexS + 1;
                    fifty.add(numN);
                }else if (counter == 2){
                    counter++;
                    numN = (nexS * 2) + 1;
                    fifty.add(numN);
                }else {
                    counter = 1;
                    numN = nexS +2;
                    fifty.add(numN);
                    nexS = nexS + 1;
                }
            }
        }

        for (Integer integer : fifty) {
            System.out.print(integer + " ");
        }
    }
}

按照你解决这个问题的方式,用 ArrayList 更容易解决。我认为我的解决方案更面向队列,这是你的任务。所以这是我的看法:

import java.util.ArrayDeque;
import java.util.Scanner;

public class SequenceQuestion {

    public static void constructSequence(int start, int seqLength) {
        ArrayDeque<Integer> queue = new ArrayDeque<>();
        queue.add(start);
        System.out.print(start);
        for (int i = 0; i < seqLength - 1; i++) {
            int print = 0;
            if (i % 3 == 0 && i != 0) queue.remove();

            if (i % 3 == 0) {
                print = queue.peek() + 1;
                queue.add(print);
            } else if (i % 3 == 1) {
                print = queue.peek() * 2 + 1;
                queue.add(print);
            } else if (i % 3 == 2) {
                print = queue.peek() + 2;
                queue.add(print);
            }
            System.out.print(", " + print);
        }
    }

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        constructSequence(s.nextInt(), 50);
    }
}

您不需要计数器,因为您已经有了一个 (i),如果您总是在开头检查 mod 3,如果等于 0,则从队列中删除第一个元素.我看到这是你遇到问题的地方。