思路:
1.双重for循环遍历输出是最基本的
2.了解曼哈顿距离
(1)菱形的输入一定是奇数
(2)我们是思想是填充 *
怎么填呢?我们来画图看看
以 3*3 的矩阵为例子!
我们来看看 距离是怎么定义的
类比下走格子,从某一个格子出发走多少个格子才能到达我们的目的地(只能一个一个格子走哦)
我们找最中间的那个格子,算下其他格子到这个最中心格子的距离
以5 * 5为例子:
也就是说 我们需要填充的 * 是曼哈顿距离小于 n/2 的格子。(n为菱形的行数)
最后:
引出一个公式:
x0 y0 是中心点
建立合适的直角坐标系,x就是为i,y就为j,从0开始遍历起。
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int cx=n/2,cy=n/2;
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
if ((abs(cx-i)+abs(cy-j))<=n/2) cout << '*';
else cout << " ";
}
cout << endl;
}
}