题目描述
727.菱形
算法1
分部分生成,上中下。
C++ 代码
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
char s[n][n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
s[i][j]=' ';
//上半部分+中间部分
for(int i=0;i<=n/2;i++)
for(int j=n/2-i;j<=n/2+i;j++)
s[i][j]='*';
//下半部分
for(int i=(n/2)+1;i<n;i++)
for(int j=n/2-(n-1-i);j<=n/2+(n-1-i);j++)
//for(int j=i-n/2;j<=n/2+(4-i);j++)
s[i][j]='*';
//输出
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<s[i][j];
}
cout<<endl;
}
return 0;
}
学习笔记
算法2
曼哈顿距离公式:c=|x1-x2|+|y1-y2|
本做法思路:以菱形最中心为曼哈顿距离为0的点,即x1=2,y1=2。
算出n=5情况下,各点距离中心的曼哈顿距离,如下所示
43234
32123
21012
32123
43234
n/2=2,大于n/2的都不需要输出,小于等于n/2的输出*
C++ 代码
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
int x1=n/2,y1=n/2;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(abs(x1-i)+abs(y1-j)<=n/2)
cout<<'*';
else
cout<<' ';
}
cout<<endl;
}
return 0;
}