思路:
将每个*看作坐标系上的点,先全部点置为*,然后消去两侧的*,最后消去中间间隔的*。
解答:
#include <cstdio>
using namespace std;
int main() {
int layer_num;
while(scanf("%d", &layer_num) != EOF) {
int h = 2*layer_num-1; //点阵边长
char matrix[h][h];
for(int y=0; y<=h-1; y++) {
for(int x=0; x<=h-1; x++) {
//每个点置为*
matrix[x][y] = '*';
//两侧置为空格
if(x<layer_num-1 && y>x && y<h-x-1)
matrix[x][y] = ' ';
if(x>layer_num-1 && y<x && y>h-x-1)
matrix[x][y] = ' ';
//中间的间隔置为空格
if(y%2==0 && x%2==1)
matrix[x][y] = ' ';
if(y%2==1 && x%2==0)
matrix[x][y] = ' ';
printf("%c", matrix[x][y]);
}
printf("\n");
}
}
return 0;
}