题目
输入一个奇数 n,输出一个由 *
构成的 n 阶实心菱形。
输入格式
一个奇数 n。
输出格式
输出一个由 *
构成的 n阶实心菱形。
具体格式参照输出杨丽。
数据范围
1≤n≤99
输入样例:
5
输出样例:
*
***
*****
***
*
分析
如图所示,这个题目用到了曼哈顿距离,什么叫曼哈顿距离呢?简而言之就是在这个5*5的方格中,以(2,2)(从0开始的)为中心,与其他任意坐标(x,y)的绝对值,其实这个时候你会发现,构成菱形的曼哈顿距离刚好是2,所以曼哈顿距离小于2的时候输出*,就可以构成一个菱形。
代码
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int x=n/2,y=n/2; //中心坐标
for(int i=0;i<n;i++) //两个for循环遍历行和列
{
for(int j=0;j<n;j++)
{
if((abs(x-i)+abs(y-j))<=(n/2))//计算曼哈顿距离,并且和构成菱形的值进行比较,也可
printf("*"); //以等于2,构成一个空心菱形
else printf(" ");
}
printf("\n");
}
return 0;
}