voidget_mn(int* m, int* n, int N){ int i = 0; do { *n = sqrt(N) - i; *m = N / (*n); i++; } while ((*m) * (*n) != N); }
intmain(){ int n; int t; vector<int> arr; cin >> n; for (int i = 0; i < n; i++) { cin >> t; arr.push_back(t); } sort(arr.begin(), arr.end()); int count = n - 1; int N, M; get_mn(&M, &N, n); vector<vector<int> > a; vector<int> temp(N); for (int i = 0; i < M; i++) { a.push_back(temp); } int i = 0; while (count >= 0) { for (int j = i; j < N - 1 - i && i < M; j++)//①从下标i开始,直到N - 1 - i a[i][j] = arr[count--]; for (int j = i; j < M - i && i < N; j++)//②从下标i开始,直到M - i a[j][N - 1 - i] = arr[count--]; for (int j = N - 1 - i - 1; j > i - 1 && i < M; j--)//①的倒序 a[M - 1 - i][j] = arr[count--]; if (N - 1 - i > i) for (int j = M - 1 - i - 1; j > i && i < N; j--)//②的倒序 a[j][i] = arr[count--]; i++; } for (int i = 0; i < M; i++) { cout << a[i][0]; for (int j = 1; j < N; j++) cout << " " << a[i][j]; cout << endl; } }