2

我正在寻找生成 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

等等。在我的 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 中的二维数组可以是三角形的。

于 2015-08-06T09:44:51.327 回答