0

これは非常に簡単ですが、どうすればよいかわかりません。

動作するようにしましたが、サイズ 6 の配列でのみ動作します。for ループを作成しようとしましたが、毎回スペースの数を減らす方法がわかりません。間違っているかもしれませんが、これが私が今持っているものです。

    public static void prettyPrint(int[] numbers) {
    System.out.println("   " + numbers[0]);
    System.out.println("  " + numbers[1] + " " + numbers[2]);
    System.out.println(" " + numbers[3] + " " + numbers[4] + " " + numbers[5]);

}

ここで、配列番号は上で次のように定義されています

    static int[] numbers = { 4, 3, 5, 6, 7, 8 };
4

1 に答える 1

1

ループを使用して、目的の出力を実装することをお勧めします。

まず、ピラミッド構造の性質について考えます。

ピラミッドのi番目の線(上から数えて)で表すことができる数はiです。たとえば、ピラミッドの上部(つまり、i = 1行目)には、1つの数字しか表示できません。同様に5行目には、5つの数字が表示されます。

これを念頭に置いて、コードは次のようになります。

int n = numbers.length;
int idx = 0;
int numRows = 0;

//First, calculate number of rows that pyramid will have 
while(idx < n){
    numRows++; 
    for(int numInRow=0; numInRow<numRows; numInRow++){
        idx++;
    }
}

//Make the pyramid
idx = 0;
for(int i=1; i <= numRows && idx < n; i++){ //Loop # of lines
    for(int j=0; j < (numRows-i) ; j++){
        System.out.print(" "); //Left pad
    }

    for(int j=0; j<i; j++){         // Add i many numbers only
        System.out.print(numbers[idx++] +" ");  //Print
        if(idx >= n){
            break;  //If index exceeds, break 
        }
    }
    System.out.println();   //New line
}
于 2013-02-22T02:07:56.967 に答える