我希望生成一个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三角形的解决方案。
答案 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数组可以是三角形。