题目描述
输入一个奇数n,输出一个由‘*’构成的n阶实心菱形。
输入格式
一个奇数n。
输出格式
输出一个由‘*’构成的n阶实心菱形。
具体格式参照输出样例。
数据范围
1≤n≤99
输入样例:
5
输出样例:
*
***
*****
***
*
自己的解法:
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n/2+1;++i){
for(int j=1;j<=n/2+1-i;++j)
cout<<" ";
for(int j=1;j<=2*i-1;++j)
cout<<"*";
cout<<endl;
}
for(int i=1;i<=n/2;++i){
for(int j=1;j<=i;++j)
cout<<" ";
for(int j=1;j<=2*((n/2+1)-i)-1;++j)
cout<<"*";
cout<<endl;
}
return 0;
}
也能通过,但是太复杂了。
先来说一下什么是曼哈顿距离
出租车几何或曼哈顿距离(Manhattan Distance)是由十九世纪的赫尔曼·闵可夫斯基所创词汇 ,是种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和。
那么这就简单了;
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
cin>>n;
int cx=n/2,cy=n/2; //(cx,cy)是中心点的坐标
for(int i=0;i<n;i++){
for(int j=0;j<=n;j++){
if((abs(i-cx)+abs(j-cy))<=n/2) cout<<"*";
else cout<<" ";
}
cout<<endl;
}
return 0;
}