首先把每行前面的空格数输出
第 1 行空格数 2 * (n - 1)
第 2 行空格数 2 * ((n - 1) - 1)
第 3 行空格数 2 * ((n - 2) - 1)
…
第 n 行空格数 2 * ((n - (n - 1)) - 1)
除第一行和最后一行将每行的中间的空格数输出
第 2 行中间空格数范围 2 * (n - 1) —— 2 * (n - 1) + 4 * (n - (n - 2) + 1) - 1
第 3 行中间空格数范围 2 * (n - 2) —— 2 * (n - 2) + 4 * (n - (n - 3) + 1) - 1
第 4 行中间空格数范围 2 * (n - 3) —— 2 * (n - 3) + 4 * (n - (n - 4) + 1) - 1
…
第 n 行中间空格数范围 2 * (n - (n - 1)) —— 2 * (n - (n - 1)) + 4 * (n - (n - (n - 1) + 1)) - 1
注意第一行和最后一行输出时是否重复输出
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define inf 0x3f3f3f3f
using namespace std;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=(n*2-1)+(i-1)*2;j++){
if(j==(n*2-1)+(i-1)*2||j==(n*2-1)-(i-1)*2){
printf("*");
} else{
printf(" ");
}
}printf("\n");
}
for(int i=n-1;i>=1;i--){
for(int j=1;j<=(n*2-1)+(i-1)*2;j++){
if(j==(n*2-1)+(i-1)*2||j==(n*2-1)-(i-1)*2){
printf("*");
}else{printf(" ");
}
}printf("\n");
}
return 0;
}