0

我有以下数字序列:

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

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

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 + " ");
        }
    }
}
4

1 回答 1

1

您解决此问题的方式使用 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,则从队列中删除第一个元素。我知道这是你遇到麻烦的地方。

于 2016-05-19T09:50:24.510 回答