#include #include /* 样例输入 3 3 140 160 140 183 172 170 180 181 174 输出行平均值 */ //创建行列式 int **arrInit(int m, int n); // 释放行列式 void arrClose(int m, int n, int **pInt); int max(int a, int b); int min(int a, int b); int main() { int m, n; scanf("%d", &n); m = n; int **l = arrInit(m, n); arrClose(m, n, l); return 0; } void arrClose(int m, int n, int **pInt) { for (int i = 0; i < m; ++i) { free(pInt[i]); } free(pInt); } int **arrInit(int m, int n) { int **l; if (m % 2) { int k = m / 2; l = (int **) malloc(m * sizeof(int *)); for (int i = 0; i < m; i++) { l[i] = (int *) malloc(n * sizeof(int)); for (int j = 0; j < n; ++j) { l[i][j] = 1 + k - max(abs(k - i), abs(k - j)); printf("%d", l[i][j]); if (j != n - 1)printf(" "); } printf("\n"); } } else { int k = m / 2; l = (int **) malloc(m * sizeof(int *)); for (int i = 0; i < m; i++) { l[i] = (int *) malloc(n * sizeof(int)); for (int j = 0; j < n; ++j) { if (j + i >= k * 2) l[i][j] = k - max(abs(k - i), abs(k - j)); else l[i][j] = 1 + k - max(abs(k - i), abs(k - j)); printf("%d", l[i][j]); if (j != n - 1)printf(" "); } printf("\n"); } } return l; } int min(int a, int b) { return a < b ? a : b; } int max(int a, int b) { return a > b ? a : b; }