网站通栏广告素材,seo快速优化,网站制作公司哪家好一点,wordpress自定义筛选1050 螺旋矩阵 (25 分) 本题要求将给定的 N 个正整数按非递增的顺序#xff0c;填入“螺旋矩阵”。所谓“螺旋矩阵”#xff0c;是指从左上角第 1 个格子开始#xff0c;按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列#xff0c;满足条件#xff1a;mn 等于 N#x…1050 螺旋矩阵 (25 分) 本题要求将给定的 N 个正整数按非递增的顺序填入“螺旋矩阵”。所谓“螺旋矩阵”是指从左上角第 1 个格子开始按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列满足条件m×n 等于 Nm≥n且 m−n 取所有可能值中的最小值。 输入格式
输入在第 1 行中给出一个正整数 N第 2 行给出 N 个待填充的正整数。所有数字不超过 10 4 相邻数字以空格分隔。 输出格式
输出螺旋矩阵。每行 n 个数字共 m 行。相邻数字以 1 个空格分隔行末不得有多余空格。 输入样例
12 37 76 20 98 76 42 53 95 60 81 58 93 输出样例
98 95 93 42 37 81 53 20 76 58 60 76
#includeiostream
#includevector
#includealgorithm
#includemath.h
using namespace std;
bool cmp(int a, int b)
{return a b;
}
int main()
{int n,h,l;cin n;vectorintv(n);for (int i 0; i n; i){cin v[i];}sort(v.begin(), v.end(), cmp);for (int i (int)sqrt(n); i n; i) {if (n % i 0) {h i (double)sqrt(n) ? i : n / i; //哈哈这里就算这样写也不要紧(double)sqrt(21) l n / h;break;}}int** a new int* [h];for (int i 0; i h; i){a[i] new int[l];}for (int i 0; i h; i){for (int j 0; j l; j){a[i][j] 0;}}int cnt 0;int i 0, j 0;while (cnt v.size()){for (j; j l; j){if (a[i][j] 0){a[i][j] v[cnt];}else{break;}}j--;i;for (i; i h; i){if (a[i][j] 0){a[i][j] v[cnt];}else{break;}}i--;j--;for (j; j 0; j--){if (a[i][j] 0){a[i][j] v[cnt];}else{break;}}j;i--;for (i; i 0; i--){if (a[i][j] 0){a[i][j] v[cnt];}else{break;}}i;j;}for (int i 0; i h; i){for (int j 0; j l; j){if (j 0)cout a[i][j];elsecout a[i][j];}cout endl;}
}