跳转至

循环嵌套的应用01-打印图形

下面的图形都以 n = 5 为例。先看第 i 行:有几个空格,几个数字或字母,分别按什么顺序输出。

数字三角形先处理 1 <= n <= 9,字符三角形先处理 1 <= n <= 26。

数字三角形

1
12
123
1234
12345
for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= i; j++) {
        cout << j;
    }
    cout << '\n';
}

第 i 行,输出 1 到 i。

靠右的数字三角形

    1
   12
  123
 1234
12345
for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n - i; j++) {
        cout << ' ';
    }

    for (int j = 1; j <= i; j++) {
        cout << j;
    }
    cout << '\n';
}

第 i 行,先输出 n - i 个空格,再输出 i 个数字。

靠右的字符三角形

    A
   AB
  ABC
 ABCD
ABCDE
for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n - i; j++) {
        cout << ' ';
    }

    for (int j = 0; j < i; j++) {
        cout << char('A' + j);
    }
    cout << '\n';
}

字符对称三角形

    A
   BAB
  CBABC
 DCBABCD
EDCBABCDE
for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n - i; j++) {
        cout << ' ';
    }
    for (int j = 1; j <= 2 * i - 1; j++) {
        cout << char(abs(j - i) + 'A');
    }
    cout << '\n';
}

第 i 行有 2 * i - 1 个字母。

abs(j - i) 表示第 j 列到中间的距离,得到 i-1、i-2、……、0、……、i-2、i-1。

使用 abs,需要头文件 <cstdlib>。