7-160 h0080. 菱形
输入一个奇数n,输出一个由‘*’构成的n阶空心菱形。
输入格式:
一个奇数n。
输出格式:
输出一个由‘*’构成的n阶实心菱形。
具体格式参照输出样例。
输入样例:
5
输出样例:
* * * * * * * *
#include <stdio.h>
int main(){
int n = 0;
scanf("%d",&n);
// 第一行 空格数=(行数-1)/2
for (int i = 0; i < (n-1)/2; ++i) {
printf(" ");
}
printf("*");
for (int i = 0; i < (n-1)/2; ++i) {
printf(" ");
}
printf("\n");
// 上
for (int i = 0; i < (n-1)/2-1; ++i) {
// 前置空格
for (int j = i; j < (n-1)/2-1; ++j) {
printf(" ");
}
// 第一个星号
printf("*");
// 中间空格
for (int j = 0; j < 2*i+1; ++j) {
printf(" ");
}
// 第二个星号
printf("*");
// 后置空格
for (int j = i; j < (n-1)/2-1; ++j) {
printf(" ");
}
printf("\n");
}
// 中间
printf("*");
// 中间空格
for (int i = 0; i < n-2; ++i) {
printf(" ");
}
printf("*\n");
// 下
for (int i = (n-1)/2-1; i > 0; --i) {
// 前置空格
for (int j = i-1; j < (n-1)/2-1; ++j) {
printf(" ");
}
// 第一个星号
printf("*");
// 中间空格
for (int j = 0; j < 2*i-1; ++j) {
printf(" ");
}
// 第二个星号
printf("*");
// 后置空格
for (int j = i-1; j < (n-1)/2-1; ++j) {
printf(" ");
}
printf("\n");
}
// 底层
for (int i = 0; i < (n-1)/2; ++i) {
printf(" ");
}
printf("*");
for (int i = 0; i < (n-1)/2; ++i) {
printf(" ");
}
printf("\n");
return 0;
}
思路
- 这个题在初学的时候容易被困惑很久,但只要静下心来去分析找一下规律,因为这个题目就一个空格和星号*,通过行数确定每个位置的空格数和星号数即可
注释中也写了具体每个循环是做的什么,可以大概结合自己分析看一下