Java 我需要帮助生成具有特定算法的金字塔来组合数字(嵌套循环)

Java 我需要帮助生成具有特定算法的金字塔来组合数字(嵌套循环),java,loops,for-loop,nested-loops,pascals-triangle,Java,Loops,For Loop,Nested Loops,Pascals Triangle,我有金字塔集的布局,我只是不知道如何组合或数学上得到接下来的几个数字。我需要的是: 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 我现在的代码是: int x = 7; for (int i =1; i<=x; i++) { for (int j =1; j<=x-i; j++) { System.out.print(" "); } for (int k=1; k<=

我有金字塔集的布局,我只是不知道如何组合或数学上得到接下来的几个数字。我需要的是:

1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
我现在的代码是:

int x = 7;
for (int i =1; i<=x; i++) {
    for (int j =1; j<=x-i; j++) {
        System.out.print("  ");
    }
    for (int k=1; k<=i;k++) {
        System.out.printf("%2d",k);
    }
    for(int k=i-1; k>=1;k--) {
        System.out.printf("%2d",k);
    }
    System.out.println(" ");
}

抱歉,如果这是奇怪的;这是我在这个网站上的第一个问题。如何修改代码以获得另一个金字塔?

首先,我假设您正在尝试计算a,并且在编写时,所需的输出是:

       1
     1 2 1
    1 3 3 1
   1 4 6 4 1
 1 5 10 10 5 1
1 6 15 20 15 6 1
你的意思是:

       1
      1 1
     1 2 1
    1 3 3 1
   1 4 6 4 1
 1 5 10 10 5 1
1 6 15 20 15 6 1
因为否则就没什么意义了

假设你犯了一个小错误,第二个三角形就是你想要的那个,那就是帕斯卡三角形。计算Pascal三角形的规则是将上面和左边的数字与上面和右边的数字相加,以找到新值

您可以很容易地编写一个递归函数来实现这一点。使用递归函数的一个好方法是编写保护程序和基本情况,然后递归。这看起来像:

private static int calculatePascalNumber(int row, int column)
{
    if (row < 1 || column < 1 || column > row) {
        return 0;
    } else if (column == 1 || row == column) {
        return 1;
    } else {
        return calculatePascalNumber(row - 1, column - 1) + 
                    calculatePascalNumber(row - 1, column);
    }
}
private static int calculatePascalNumber(int行,int列)
{
如果(行<1 | |列<1 | |列>行){
返回0;
}else if(列==1 | |行==列){
返回1;
}否则{
返回calculatePascalNumber(第1行第1列)+
calculatePascalNumber(第1行,第1列);
}
}
以下是此功能的规则

  • 如果行或列小于1或列宽于 行这些是三角形外的点,应返回0
  • 如果列位于某个结束列中(列等于1或行与列相等),则返回1
  • 否则,将上面的两个数字加在左边和右边
然后可以在代码中调用这个函数

int x = 7;
for (int row = 1; row <= x; row++) {

    for (int j =1; j<=x-row; j++) {
        if (j % 2 == 0) {
            System.out.print("  ");
        } else {
            System.out.print(" ");
        }
    }

    for (int column=1; column<=row;column++) {
        System.out.printf(" %2d", calculatePascalNumber(row, column));
    }

    System.out.println(" ");
}
intx=7;

对于(int row=1;row?我编辑了你问题中的代码,使其缩进与其结构相匹配,这样回答者就可以更容易地提供帮助。我不知道缩进是否只是在你将代码粘贴到这个网站时被弄乱的,但如果不是,也许查看这个新的缩进会让你更容易发现任何错误。你正在尝试的数字金字塔称为缩进生成。输出是否需要缩进,以便每一行都精确居中?或者,如果左边缘是一条直线对角线,就像当前输出中的一样,即使右边缘不平衡,也可以吗?将文本完全居中会比较困难。数字需要居中。
private static int calculatePascalNumber(int row, int column)
{
    if (row < 0 || column < 0 || column > row) {
        return 0;
    } else if (column == 1) {
        return 1;
    } else {
        return (calculatePascalNumber(row, column - 1) 
                  * (row + 1 - column)) / (column - 1); 
    }
}