Skip to content

13. 镂空三角形

时间限制:1.000S 空间限制:32MB

题目描述

把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果。在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果。

输入描述

每行包含一个字符和一个整数n(0< n <41),不同的字符表示不同的花纹,整数n表示等腰三角形的高。显然其底边长为2n-1。如果遇到@字符,则表示所做出来的样板三角形已经够了。

输出描述

每个样板三角形之间应空上一行,三角形的中间为空。行末没有多余的空格。每条结果后需要再多输出一个空行。

输入示例

X 2 A 7 @

输出示例

X

XXX

 A

A A

A A

A A

A A

A A

AAAAAAAAAAAAA

解法一(模拟)

思路分析:

  1. 根据题目要求进行模拟
  2. 等腰三角形最长边为2*n-1

实现代码如下:

java
public class k_13_HollowTriangle {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String ch;
        while (in.hasNext() && !"@".equals(ch = in.next())) {
//            System.out.println(ch);
            int n = in.nextInt();
//            System.out.println(n);
            printTriangle(n, ch);
            System.out.println();
        }
    }
    private static void printTriangle(int n, String ch) {
        for (int i = 1; i <= n; ++ i) {
            // 输出空格
            for (int j = i; j < n; ++ j) {
                System.out.print(" ");
            }
            // 计算每行的长度
            int len = 2 * i - 1;
            // 输出字符
            for (int j = 1; j <= len; ++ j) {
                if (j == 1 || j == len || i == n) {
                    // 此时输出边上的字符
                    System.out.print(ch);
                } else {
                    // 否则输出空格
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
}

运行结果如下:

运行时间: 473ms 消耗内存: 14260kb

复杂度分析:

  • 时间复杂度: O(n2)
  • 空间复杂度: O(1)