题目

打印空心菱形(用 * 与空格)

思路

上半部类似金字塔,下半部镜像;每行若 col 在左右边界则 * 否则空格,中心线单独处理。

解题分析

空心图只在边界放 *,内部空格。先画上半再镜像下半,或算每行 star 的列区间。行数为奇数时对称轴一行只有一个 *。

完整程序

#include <stdio.h>

int main(void)
{
    int n;
    if (scanf("%d", &n) != 1 || n < 3 || n % 2 == 0) {
        return 1;
    }
    int mid = n / 2;
    for (int i = 0; i < n; i++) {
        int dist = i <= mid ? mid - i : i - mid;
        for (int s = 0; s < dist; s++) {
            putchar(' ');
        }
        for (int j = dist; j < n - dist; j++) {
            if (j == dist || j == n - dist - 1) {
                putchar('*');
            } else {
                putchar(' ');
            }
        }
        putchar('\n');
    }
    return 0;
}

运行示例

输入:

5

输出:

  *
 * *
*   *
 * *
  *