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);
    }
}

既に 1 つ ( ) があるため、カウンターは必要ありませんi。最初に mod 3 を常にチェックし、0 に等しい場合は、最初の要素をキューから削除します。これがあなたが苦労した場所であることがわかりました。

于 2016-05-19T09:50:24.510 に答える