C2-3实心菱形 (100/100 分数)
题目描述
打印 n 阶实心菱形
输入描述
输入一个整数n,0 < n <= 10
输出描述
输出 n 阶实心菱形 , 占 2*n-1 行
样例输入
3
样例输出
*
***
*****
***
*
解题
#include <iostream>
using namespace std;
int main()
{
int n = 0,i,j,k;
cin >> n;
for (i = 0; i <= 2 * n - 1; i++)
{
if (i > n) k = 2 * n - i;
else k = i;
for (j = 1; j <= 2 * n - 1; j++)
{
if (j <= n - k) cout << " ";
else if (j < n + k) cout << "*";
}
cout << endl;
}
return 0;
}
思考
- 从这道题最大的层次看到的是对称图案,上下对称,所以先计算出n行的结果,剩下的n-1行的结果是以第n行为对称轴关于前n-1行对称。
- 前n-1行的规律为输出n-i个空格,再输出2*i-1个星号,所以用j代表一行中的各个位置。使用if else结构完成这一要求。
- 后n-1行的处理方法就是使用对称方法,第n+i行的图像和n-i行的图像是相同的。