本题要求编写程序,打印一个高度为 n 的、由 “*” 组成的正菱形图案。
输入格式:
输入在一行中给出一个正的奇数 n。
输出格式:
输出由 n 行星号 “*” 组成的菱形,如样例所示。每个星号后跟一个空格。
输入样例:
7
输出样例:
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/12/exam/problems/295
提交:
题解:
#include<stdio.h>
int main(void) {
int n;
scanf("%d", &n);
/*
* 以 * 号最多的一行做上下分割,分为上半部分(包含 * 号最多的一行)和下半部分,
* 首先输出菱形图案的上半部分
*/
int countStar = 1;
int countBlank = n - 1;
for (int i = 1; i <= (n + 1) / 2; i++) {
// 首先输出每一行 * 号前的空格
for (int j = 1; j <= countBlank; j++) {
printf(" ");
}
// 输出当前行的所有 *
for (int k = 1; k <= countStar; k++) {
printf("* ");
}
printf("\n");
countStar += 2;
countBlank -= 2;
}
/*
* 输出菱形图案的下半部分
* * 号比上一行少 2,因输出菱形上半部分过程中 countStar += 2,故此时 countStar -= 4,
* 空格比上一行多 2,因输出菱形上半部分过程中 countBlank -= 2,故此时 countBlank += 4
*/
countStar -= 4;
countBlank += 4;
for (int i = 1; i <= (n - 1) / 2; i++) {
for (int j = 1; j <= countBlank; j++) {
printf(" ");
}
for (int k = 1; k <= countStar; k++) {
printf("* ");
}
printf("\n");
countStar -= 2;
countBlank += 2;
}
return 0;
}