作者 黄正鹏
单位 贵州工程应用技术学院
输入一个奇数n,输出一个由‘*’构成的n阶空心菱形。
输入格式:
一个奇数n。
输出格式:
输出一个由‘*’构成的n阶实心菱形。
具体格式参照输出样例。
输入样例:
5
输出样例:
*
* *
* *
* *
*
代码长度限制
16 KB
时间限制
4000 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
int main(){
int line; //line行
scanf("%d", &line);
if(line % 2 == 1){ //n为奇数
for(int i = 1; i <= line; i++){ //循环输入每一层*
if(i == 1){ //第一行
for(int j = 1; j < line / 2 + 1; j++){ //第行前置空格
printf(" ");
}
printf("*"); //第一行中间*
for(int k = 1; k < line/2+1; k++){ //第一行后置空格
printf(" ");
}
printf("\n");
continue;
}
if(i >= 2 && i <= line / 2){ //除了特殊的三行的上半部分其余行(第一行,中间一行,最后一行)
for(int n = (line - 3) / 2; n > 0; n--){ //循环其余每行(上半部分)
for(int l = n; l > 0; l--){ //前置空格
printf(" ");
}
printf("*");
for(int p = 1; p <= 2 * (i - 1) - 1; p++){ //中间空格
printf(" ");
}
printf("*");
for(int l = n; l > 0; l--){ //后置空格
printf(" ");
}
printf("\n");
i++;
}
}
if(i == line / 2 + 1){ //中间行
printf("*");
for(int m = 1; m <= line - 2; m++){ //中间空格
printf(" ");
}
printf("*\n");
continue;
}
if(i >= line / 2 + 2 && i <= line - 1){ //除了特殊的三行的下半部分其余行(第一行,中间一行,最后一行)
for(int n = (line - 3) / 2; n > 0; n--){ //循环其余每行(下半部分)
for(int l = n; l <= (line - 3) / 2; l++){ //前置空格
printf(" ");
}
printf("*");
for(int p = 2 * (i - (line - line / 2)) - 1; p <= line - 4; p++){ //中间空格
printf(" ");
}
printf("*");
for(int l = n; l <= (line - 3) / 2; l++){ //后置空格
printf(" ");
}
printf("\n");
i++;
}
}
if(i == line){ //最后一行
for(int j = 1; j < line / 2 + 1; j++){ //最后一行前置空格
printf(" ");
}
printf("*"); //最后一行中间*
for(int k = 1; k < line/2+1; k++){ //最后一行后置空格
printf(" ");
}
printf("\n");
continue;
}
}
}
return 0;
}