提交时间:2026-02-05 15:09:26

运行 ID: 83999

#include <iostream> #include <cstring> using namespace std; int main() { int n; cin >> n; // 计算图案的边长:4n+5 int size = 4 * n + 5; // 中心坐标(从0开始) int mid = size / 2; // 创建二维数组存储图案,初始化为'.' char graph[100][100]; // 足够容纳n<30的情况(4*29+5=121) memset(graph, '.', sizeof(graph)); // 步骤1:绘制中心十字主干 // 横向中心线 for (int i = 0; i < size; ++i) { graph[mid][i] = '$'; } // 纵向中心线 for (int i = 0; i < size; ++i) { graph[i][mid] = '$'; } // 步骤2:绘制分层的环形结构 int offset = 2; // 每层的偏移量 for (int k = 1; k <= n; ++k) { // 计算当前层的四个拐角坐标 // 左上拐角 int x1 = mid - offset; int y1 = mid - offset; // 右上拐角 int x2 = mid - offset; int y2 = mid + offset; // 左下拐角 int x3 = mid + offset; int y3 = mid - offset; // 右下拐角 int x4 = mid + offset; int y4 = mid + offset; // 标记四个拐角为$ graph[x1][y1] = '$'; graph[x2][y2] = '$'; graph[x3][y3] = '$'; graph[x4][y4] = '$'; // 标记横向连接边(上下两层) for (int i = y1 + 1; i < y2; ++i) { graph[x1][i] = '$'; // 上层横向 graph[x3][i] = '$'; // 下层横向 } // 标记纵向连接边(左右两层) for (int i = x1 + 1; i < x3; ++i) { graph[i][y1] = '$'; // 左层纵向 graph[i][y2] = '$'; // 右层纵向 } offset += 2; // 下一层偏移量+2 } // 步骤3:逐行输出图案 for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { cout << graph[i][j]; } cout << endl; } return 0; }