1

我想为给定的数字“n”生成一个金字塔堆栈(“n” - 也是最后一个金字塔的高度)。该算法应堆叠 (n-1) 个金字塔。结果应该是这样的:

height of base pyramid: 4

          2
        2 4 2
          2
        2 4 2
      2 4 8 4 2
          2
        2 4 2
      2 4 8 4 2
   2 4 8 16 8 4 2

我已经有一段代码可以生成最后一个金字塔:

for (i = 1; i <= n; i++) {
    for (j = 1; j <= n - i; j++)
        System.out.printf("%5s", "");
    for (k = 1; k < i; k++)
        System.out.printf("%5d", (int) Math.pow(2, k));
    for (k = i; k >= 1; k--)
        System.out.printf("%5d", (int) Math.pow(2, k));
        System.out.println();
    }

任何想法都会有所帮助。

4

2 回答 2

1

for在最外层再添加一个循环:-

for (int z = n - 2; z >= 0; z--)

因此,您的循环结构变为: -

for (int z = n - 2; z >= 0; z--) {
        for (int i = 1; i <= n - z; i++) {
            for (int j = 1; j <= n - i; j++)
                System.out.printf("%5s", "");
            for (int k = 1; k < i; k++)
                System.out.printf("%5d", (int) Math.pow(2, k));
            for (int k = i; k >= 1; k--)
                System.out.printf("%5d", (int) Math.pow(2, k));
            System.out.println();
        }
    }

z开始是n - 2因为,第一个金字塔的长度为 2。请注意,在第二个内循环中,您的条件更改为i <= n - z

现在,您的原始循环集运行3 times (n - 2) == 2for n = 4,并且循环运行直到 from z = 2to z = 0。它创建了一个高度金字塔:(n - z)- (4 - 2) = 2,,,背靠背。(4 - 1) = 3(4 - 0) = 4

于 2012-11-18T18:35:56.647 回答
0

暗示 :-

您拥有的代码会生成一个长度金字塔n

将它包含在一个for循环中,循环说counter=n-1直到counter=0

在您现有的代码中将 value.of 替换nn-counter+1

于 2012-11-18T18:36:09.780 回答