可以将要输出的图形存在一个char类型的二维数组中,要先分析出图形的行数和列数
行数=2n-1
列数=n+2(n-1)
int a = n + 2 * (n - 1); //列数
int b = 2 * n - 1; //行数
根据图形的行数和列数,在二维数组中开辟一个行数×列数的空白区域(空白用空格来代替)
//根据图形行数和列数,在二维数组中开一个行数×列数的空格区域
for (int i = 1; i <= b; i++) //遍历行
{
for (int j = 1; j <= a; j++) //遍历列
{
c[i][j] = ' ';
}
}
接下来就将 * 存入数组中对应的位置上
存储规则如下图所示:
//将*存入数组中对应的位置
for (int i = 1; i <= b; i++) //遍历行
{
if (i == 1 || i == b) //第一行和最后一行
{
for (int j = n; j <= 2*n-1; j++) //从下标n开始,设置n个*
{
c[i][j] = '*';
}
}
else if (i <= b / 2) //第2~n-1行,左边位置n-i+1处一个*,右边位置a-n+i处一个*
{
c[i][n - i + 1] = '*';
c[i][a - n + i] = '*';
}
else if (i == n) //第n行,*的位置在两端
{
c[i][1] = '*';
c[i][a] = '*';
}
else if (i > b / 2) //第n+1~b-1行,左边位置i-n+1处一个*,右边位置a+n-i处一个*
{
c[i][i - n + 1] = '*';
c[i][a + n - i] = '*';
}
}
最后双重for循环输出该数组即可。