2

次数 4 の M 算術三角形を生成しようとしています。

次のようになります。

1
1 1 1 1 
1 2 3 4 3 2 1
1 3 6 10 12 12 10 6 3 1 
1 4 10 20 31 40 44 40 31 20 10 4 1

等々。最初の 2 行は、次数 4 の M 算術三角形で常に一定です。それ以降、各項は、その上の項とその上の項の左側にある 3 つの項の合計です。

これらの数値を含む行列のサイズを定義する変数は次のとおりです。

int y = user.nextInt();
int max = 3*y + 1;
int[][] m-arith = new int [y][max];

コードで M 算術三角形を生成するにはどうすればよいですか? 数字で満たされていないすべての場所にゼロを入れるだけでなく? 次のようにマトリックスを手動で宣言できます (数行を表示するだけです)。

int[][] m-arith = { 
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
            {1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
            {1,2,3,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                      
    };

しかし、数行以上必要な場合、これは途方もない時間の無駄のように思えます。

何か案は?

編集: さらに言えば、任意の次数の M 算術三角形を生成するコードは興味深いでしょう。ただし、次数 4 の三角形に固有のソリューションを探しています。

4

1 に答える 1

0

まず、Java の整数のデフォルト値はゼロです。それらを初期化する必要はありません。

コード:

int y = user.nextInt();
int max = y*(y-1) + 1; // <--- updated here, change 3 with y-1
int[][] mat = new int [y+1][max]; // y+1 not y (for degree 4 we have 5 rows)

// ask user to enter the first two constant rows
mat [0][0] = user.nextInt();
for (int i=0;i<y;i++)
    mat [1][i] = user.nextInt();

for (int i=2;i<y+1;i++)
{
    for (int j=0;j<(y-1)*i+1;j++)
    {
        for (int k=j;k>=j-y+1;k--)
        {
            mat[i][j] += mat[i-1][k];
        }
    }
}

// print your array here!

動的次数と動的定数

注:指摘されたように。Java の 2D 配列は三角形にすることができます。

于 2015-08-06T09:44:51.327 に答える