C语言/C++打印菱形(利用曼哈顿距离)【简单易懂,代码可以直接运行】
初学C的时候,打印菱形对于我来说就是噩梦,永远找不到控制二层循环最好的点,每次打印都没思路,不过这篇文章的解法非常简单易懂
首先我先价绍什么是曼哈顿距离:
可以看到找距离为n/2的点,是不是一下子让问题变得简明的超级多,这就突然和烦人的循环没多少关系了
代码如下:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
//利用曼哈顿距离 d = |x1 - x2|+|y1 - y2|
int x,y,center_x,center_y,n;
cin>>n;
center_x = n/2;
center_y = n/2;
cout<<center_x<<endl;
for(x = 0;x < n;x++)
{
for(y = 0;y < n;y++)
{
if((abs(x - center_x) + abs(y - center_y)) <= n/2)
{
cout<<"*";
}
else
{
cout<<' ';//不是输出星的位置输出‘ ’
}
}
cout<<endl;
}
return 0;
}
还可以根据这个距离,打印空心的菱形,想一想只需要将距离条件控制到等于n/2,就是只打印一个菱形的边界一个空心菱形不久出来了吗?
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
//利用曼哈顿距离 d = |x1 - x2|+|y1 - y2|
int x,y,center_x,center_y,n;
cin>>n;
center_x = n/2;
center_y = n/2;
cout<<center_x<<endl;
for(x = 0;x < n;x++)
{
for(y = 0;y < n;y++)
{
if((abs(x - center_x) + abs(y - center_y)) == n/2)
{
cout<<"*";
}
else
{
cout<<' ';//不是输出星的位置输出‘ ’
}
}
cout<<endl;
}
return 0;
}
点个👍吧,秋梨膏