#include<iostream>
using namespace std;
int main()
{
int n = 0;
cout << "输入菱形的边长:";
cin >> n;
cout << "图形如下:" << endl;
//上半层
for (int i = 0; i < n; i++) // 外层控制循环次数,输入的数字就是上半层循环的次数
{ // (n-1)比外层循环少一次,减去i就是每行少一个空格
for (int j = 0; j < (n - 1) - i; j++) // 内层循环打印空格的个数 外层循环n次 内层循环n-1次
{ // 循环几次几个空格
cout << " "; // 第n层的时候 i=n-1 空格为0 所以这层不用循环 所以循环次数可以变成n-1
} // 或者j<n-1-i
//星星的个数是 1 3 5 7 9 12...2*n+1 的等差数列形式递增的
for (int j = 0; j < (2 * i + 1); j++) // 内层循环打印行星的个数 i=0时 j<=0 循环1次 打印一颗星
// 循环几次几个星星 i=1时 j<=2 循环3次 打印三颗星 以此类推
{ // 也可以写成 j<2*i+1 一样
cout << "*";
}
cout << endl;
}
//下半层
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < i + 1; j++) // 下半层从上往下 空格个数越来越多 循环次数也就跟着增多
{
cout << " ";
}
for (int j = 0; j < 2 * ( n - 1 ) - (1 + 2 * i); j++)//下半层从上往下 星星个数依次递减 循环次数也就跟着减少
{
cout << "*"; // 星星的个数是 2*n-1 2*n-3 .....2*n-(1+2*i) 等差数列递减
// 因为是下半层从n-1开始的 所以这里的N=n-1
}
cout << endl; // 和上面一样、 循环几次几个星星
}
return 0;
}
运行结果: