// 固定数组方式,x范围:0~9 int concentric_matrix_1(int x) { int m = 2 * x + 1; int i; int j = 0; int a[20][20]; // 初始化为0 for (i = 0; i < m; i++) for (j = 0; j < m; j++) a[i][j] = 0;
j = 0; while (x > 0) { for (i = j; i < m - j; i++) { a[j][i] = x; a[i][j] = x; a[m -1 - j][i] = x; a[i][m - 1 - j] = x; } j++; x--; }
// 输出 for (i = 0; i < m; i++) { for (j = 0; j < m; j++) { printf("%d ", a[i][j]); } printf("\n"); } return 0; }
// 同心矩形 动态分配数组方式 // x最好是0~9,不然输出格式不对齐 int concentric_matrix_2(int x) { int m = 2 * x + 1; int i; int j = 0; int **a;
a = (int **)malloc(m * sizeof(int)); // 相当于只分配了a[i] for (i = 0; i < m; i++) a[i] = (int *)malloc(m * sizeof(int)); // 相当于分配a[i]后面的m个数 // 初始化为0 for (i = 0; i < m; i++) for (j = 0; j < m; j++) a[i][j] = 0;
j = 0; while (x > 0) { for (i = j; i < m - j; i++) { a[j][i] = x; a[i][j] = x; a[m -1 - j][i] = x; a[i][m - 1 - j] = x; } j++; x--; }
// 输出 for (i = 0; i < m; i++) { for (j = 0; j < m; j++) { printf("%d ", a[i][j]); } printf("\n"); } for (i = 0; i < m; i++) free(a[i]); free(a); return 0; }
int main(void) { concentric_matrix_2(8); return 0; }