java - 生成给定数字的金字塔?

标签 java for-loop printf

我想为给定的数字“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();
    }

任何想法都会有帮助。

最佳答案

再添加一个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();
        }
    }

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

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

关于java - 生成给定数字的金字塔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13443188/

相关文章:

perl - Perl 中的 Sprintf 无法正确显示十六进制字符

java - 引用对象?

java - Spring依赖注入(inject)——配置的最佳设计模式

c++ - 在 C++ 中解析 YAML 字典列表

c++ - 如何让字符串输入n次?

java - 设置迭代器的 Java 泛型

c 将 uint32_t 转换为 int32 保存到文件并读取 uint32_t Agein

java - 大数的模块化归约

Java jMonkey bug,out.write 在 if 循环内

c - printf() 的意外行为