思想:相当于在一个正方形矩阵的二维数组里打印菱形,正方形的边是奇数;
* 号:从第一行的中间开始打印, 空格 打印一边;
我分为三个部分:
- 上半部分:* 号上一层比下一层多2个,空格 是下一层比上一层少一个。
- 中间一行:打印一整行的 * 号;
- 下半部分:* 号上一层比下一层少2个,空格 是下一层比上一层多一个。
代码:
int star = 1; //*号的个数
int n; //正方形矩阵的边,为奇数
cout << "请输入一个大于1的奇数:" << endl;
cin >> n;
int k = 0; //下班部分的空格数
int t = n / 2; //上半部分的空格数
for (int i = 1; i < n + 1; i++) //行数, i从1开始,无所谓
{
if (i == n / 2 + 1) //i为中间行数时
{
for (int j = 0; j < n; j++)
{
cout << "*";
}
cout << endl;
star -= 2;
}
else if (i < n / 2 + 1) //i为上半部分时
{
for (int j = 0; j < t; j++)
{
cout << " ";
}
for (int j = 0; j < star; j++)
{
cout << "*";
}
cout << endl;
star += 2; //上半部分 * 上一层比下一层多2个
t--; //空格数减一
}
else //i为下半部分时
{
k++; //空格数加一
for (int j = 0; j < k; j++)
{
cout << " ";
}
for (int j = 0; j < star; j++)
{
cout << "*";
}
cout << endl;
star -= 2; //上半部分 * 上一层比下一层少2个
}
}