题目
从标准输入读入一个正奇数 n,在控制台使用星号 * 和空格打印出边长对称的空心菱形图案。
输入格式:一行输入一个正奇数 n,表示菱形的总行数。
输出格式:输出 n 行字符图案,构成空心菱形。
数据范围与约定:3 ≤ n ≤ 29,保证 n 为奇数。
思路与算法
1. 上下对称划分
以中间行 mid = n / 2 为对称轴。前半部分(上半)行号逐渐展开,后半部分(下半)逐渐收缩。
2. 空心打印判定
每行只在左右边界位置打印 *,中间内部区域填充空格;顶点行(第 1 行和最后一行)只有一个星号。
完整程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int mid = n / 2;
// 对称打印空心菱形
for (int i = 0; i < n; i++) {
int dist = Math.abs(i - mid);
int spaces = dist;
for (int s = 0; s < spaces; s++) {
System.out.print(" ");
}
System.out.print("*");
int inner = n - 2 * dist - 2;
if (inner >= 0) {
for (int s = 0; s < inner; s++) {
System.out.print(" ");
}
System.out.print("*");
}
System.out.println();
}
}
}运行示例
输入:
5输出:
*
* *
* *
* *
*