怎么把*排成一个菱形

img

img

输出\t制表符

循环的话,分成上下两部分,找到规律就行

没有控制好空格的位置

#include<iostream>
using namespace std;
int main()
{
    int n = 0;
    cout << "输入菱形的边长:";
    cin >> n;
    //上半层
    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
        }                                                               
        //星星的个数是 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;
}