如何生成M算术三角形 - Java

时间:2015-08-06 09:31:02

标签: java pascals-triangle

我希望生成一个4阶的M算术三角形。这里描述的是:http://www.sciencedirect.com/science/article/pii/S0024379509003577?np=y

它看起来像这样:

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

等等。前两行总是在我的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三角形的解决方案。

1 个答案:

答案 0 :(得分: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数组可以是三角形。