具体问题:
输入一个奇数 n,输出一个由 *
构成的 n 阶实心菱形。
输入格式
一个奇数 n。
输出格式
输出一个由 *
构成的 n阶实心菱形。
具体格式参照输出样例。
数据范围
1≤n≤99
输入样例:
5
输出样例:
* *** ***** *** *
用曼哈顿的思路
曼哈顿距离
分析实例
我们先画一个5 * 5的表格,以最中间的点作为参考点
最后格个格子对应的值如上图所示,这样就可以根据曼哈顿距离的值进行筛选实现图形。
代码实现
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
cin >> n;
int x0 = n / 2, y0 = n / 2;
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++)
{
if(abs(i - x0) + abs(j - y0) <= 2) cout << '*';
else cout << ' ';
}
cout << "\n";
}
return 0;
}
问题:如果想输出上述的空心菱形
实际上通过图像不难看出,之需将if中的条件改成if(abs(i - x0) + abs(j - y0) == 2)即可。
结语
曼哈顿距离的这种运用可以用在很多其他方面,通过改变参考点以及判断条件输出不同图形,可以自己试试。