写在前面
思路参考自博客:博客链接
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/smallrain6/article/details/105687302
题目
输入一个奇数n,输出一个由‘*’构成的n阶实心菱形。
输入格式
一个奇数n。
输出格式
输出一个由‘*’构成的n阶实心菱形。
具体格式参照输出样例。
数据范围
1≤n≤99
输入样例:
5
输出样例:
*
***
*****
***
*
blah blah
好神奇,这题还有这种规律,第一次了解了曼哈顿距离这个概念,我想起了那天夕阳下的奔跑,我的憨憨找规律代码——
&@#¥%&*@&#
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
for (int i =1; i <=n; ) {
for (int m = 1; m <= (n-i) /2; m ++ ) cout << " ";
for (int m = 1; m <= i; m ++ ) cout << "*";
for (int m = 1; m <= (n-i) / 2; m ++ ) cout << " ";
cout << endl;
i +=2;
}
for (int i = n-2; i >= 1; ) {
for (int m = 1; m <= (n-i) /2; m ++ ) cout << " ";
for (int m = 1; m <= i; m ++ ) cout << "*";
for (int m = 1; m <= (n-i) / 2; m ++ ) cout << " ";
cout << endl;
i -= 2;
}
return 0;
}
现在看我当初敲的这,咦!这,这啥呀,眯眼 =_=
用曼哈顿距离规律的代码
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
int main() {
int n;
while (cin >> n) {
int cx = n / 2, cy = n / 2; //中心点的坐标
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) { //曼哈顿距离 <= n/2 的打"*"
if (fabs(i - cx) + fabs(j - cy) <= n / 2) cout << "*";
else cout << " ";
}
cout << endl;
}
cout << "空心菱形" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) { //曼哈顿距离 == n/2 的打"*"
if (fabs(i - cx) + fabs(j - cy) == n / 2) cout << "*";
else cout << " ";
}
cout << endl;
}
}
return 0;
}
————————
END
好神奇的说
————————