【问题标题】:Java Calculate Sequence with QueueJava用队列计算序列
【发布时间】:2016-05-19 08:21:16
【问题描述】:

我有以下数字序列:

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

使用ArrayDeque<E> 类,我必须编写一个程序来打印给定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 + " ");
        }
    }
}

【问题讨论】:

  • 你尝试了吗?你能告诉我们你做了什么吗?
  • 我改了。这不是故意的。对不起

标签: java queue arraydeque


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

【讨论】:

  • 不客气。如果这回答了您的问题,请在我的帖子左上角选择它作为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多