设定基点坐标(0,0)
从外向内逐层循环,每次循环基点坐标向下向右移2位
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
char s[150][150];
int main()
{
int n, x, y;
scanf("%d", &n);
x = 0;//选择基点(0,0)
y = 0;
for (int i = 0; i < 4 * n + 5; i++)
{
for (int j = 0; j < 4 * n + 5; j++)
{
s[i][j] = '.';//将4*n+5的区域内全部赋值为'.'
}
}
for (int i = 0; i < n + 1; i++)
{
for (int j = y + 2; j <= y + 4 * (n - i) + 2; j++)
{
s[x][j] = '$';//将第1行第3列-第15列重复赋值为'$'
}
for (int j = x; j <= x + 2; j++)
{
s[j][y + 2] = '$';//将第1行第3列-第3行第3列重复赋值为'$'
}
for (int j = x; j <= x + 2; j++)
{
s[j][y + 4 * (n - i) + 2] = '$';//将第1行第15列-第3行15列重复赋值为'$'
}
for (int j = y; j <= y + 2; j++)
{
s[x + 2][j] = '$';//将第3行第1列-第3行第3列重新赋值为'$'
}
for (int j = y + 4 * (n - i) + 2; j <= y + 4 * (n - i) + 4; j++)
{
s[x + 2][j] = '$';//将第3行第15列-第3行第17列重新赋值为'$'
}
for (int j = x + 2; j <= x + 4 * (n - i) + 2; j++)
{
s[j][y] = '$';//将第3行第1列-第15行第1列重新赋值为'$'
}
for (int j = x + 2; j <= x + 4 * (n - i) + 2; j++)
{
s[j][y + 4 * (n - i) + 4] = '$';//将第3行第17列-第15行第17列重新赋值为'$'
}
for (int j = y; j <= y + 2; j++)
{
s[x + 4 * (n - i) + 2][j] = '$';//将第15行第1列-第15行第3列重新赋值为'$'
}
for (int j = y + 4 * (n - i) + 2; j <= y + 4 * (n - i) + 4; j++)
{
s[x + 4 * (n - i) + 2][j] = '$';//将第15行第15列-第15行第17列重新赋值为'$'
}
for (int j = x + 4 * (n - i) + 2; j <= x + 4 * (n - i) + 4; j++)
{
s[j][y + 2] = '$';//将第15行第3列-第17行第3列重复赋值为'$'
}
for (int j = x + 4 * (n - i) + 2; j <= x + 4 * (n - i) + 4; j++)
{
s[j][y + 4 * (n - i) + 2] = '$';//将第15行第15列-第17行15列重复赋值为'$'
}
for (int j = y + 2; j <= y + 4 * (n - i) + 2; j++)
{
s[x + 4 * (n - i) + 4][j] = '$';//将第17行第3列-第15列重复赋值为'$'
}
x += 2;
y += 2;
}
for (int i = 0; i < 4 * n + 5; i++)
{
printf("%s\n", s[i]);
}
return 0;
}