#include <math.h>
#include <stdio.h>
int main() {
int n, i, j, x, y, x1, y1, move;
scanf("%d", &n);
char a[1000][1000] = {0};
y = 3 * pow(2, n - 1) - 1;
a[0][y] = '*';
a[1][y - 1] = '*';
a[1][y + 1] = '*';
a[2][y - 2] = '*';
a[2][y] = '*';
a[2][y + 2] = '*';
//若n大于2则复制上一个三角形到左下角和右下角
for (i = 1; i < n; i++) {
move = 3 * pow(2, i - 1) - 1;
//左下角
for (x1 = 0; x1 < 3 * pow(2, i); x1++) { //上一个三角形的层数
for (y1 = y - move; y1 <= y + move;y1++)
{ //从上个三角形的最左边遍历到最右边
a[x1 + move + 1][y1 - move - 1] = a[x1][y1];
}
}
//右下角
for (x1 = 0; x1 < 3 * pow(2, i); x1++) { //上一个三角形的层数
for (y1 = y - move; y1 <= y + move; y1++)
{ //从上个三角形的最左边遍历到最右边
a[x1 + move + 1][y1 + move + 1] = a[x1][y1];
}
}
}
for(i=0;i<y+1;i++)
{
for(j=0;j<3*pow(2,n)-1;j++)
{
if(a[i][j]=='*') printf("*");
else printf(" ");
}printf("\n");
}
for(i=0;i<n;i++)
{
for(j=0;j<=y;j++)
{
if(j==y) printf("*");
else printf(" ");
}printf("\n");
}return 0;
}
不想在画图了



京公网安备 11010502036488号