解法一:直接推*号所在的列的起始坐标和终止坐标
$\color{red}{起始坐标:}$(n-star)/2
$\color{red}{终止坐标:}$(n-star)/2+star-1
#include<iostream>
#include <cmath>
using namespace std;
int main()
{
int n,star=1;
cin>>n;
for (int i=0;i<n; i++){
for(int j=0;j<n;j++){
if(j>=(n-star)/2 && j<=(n-star)/2+star-1) cout<<'*';
else cout<<' ';
}
if(i>=n/2) star-=2;
else star+=2;
cout<<endl;
}
return 0;
}
解法二:曼哈顿距离
#include<iostream>
#include <cmath>
using namespace std;
int main()
{
int n,star=1;
cin>>n;
for (int i=0;i<n; i++){
for(int j=0;j<n;j++){
if(abs(i-n/2)+abs(j-n/2)<=n/2) cout<<'*';
else cout<<' ';
}
cout<<endl;
}
return 0;
}
$\color{brown}{有什么问题,欢迎在评论下方指出}$