哪个网站专门做灵异文,上海装修公司做网站,网站建站 优化,做亚马逊跨境电商要多少投资本题要求将给定的 N 个正整数按非递增的顺序#xff0c;填入“螺旋矩阵”。所谓“螺旋矩阵”#xff0c;是指从左上角第 1 个格子开始#xff0c;按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列#xff0c;满足条件#xff1a;mn 等于 N#xff1b;m≥n#xff1b;且… 本题要求将给定的 N 个正整数按非递增的顺序填入“螺旋矩阵”。所谓“螺旋矩阵”是指从左上角第 1 个格子开始按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列满足条件m×n 等于 Nm≥n且 m−n 取所有可能值中的最小值。 输入格式 输入在第 1 行中给出一个正整数 N第 2 行给出 N 个待填充的正整数。所有数字不超过 1相邻数字以空格分隔。 输出格式 输出螺旋矩阵。每行 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 //甲级的可以通过乙级的最后一个测试点没有通过
//运行时间问题哪里的时间复杂度还可以在优化
#includecstdio
#includealgorithm
#includecmath
using namespace std;
const int maxn 10010;
int matrix[maxn][maxn],A[maxn];
bool cmp(int a,int b){return a b;
}int main(){int N;scanf(%d,N);for(int i 0; i N; i){scanf(%d,A[i]);}sort(A,AN,cmp);if(N 1){printf(%d,A[0]);return 0;}int m (int)ceil(sqrt(1.0*N));while(N % m ! 0) m;int n N/m,i 1,j 1,now 0; //m is line,n is columnint U 1,D m,L 1,R n;while(now N){while(now N j R){ //forward to rightmatrix[i][j] A[now];j;}while(now N i D){matrix[i][j] A[now]; //to downi;}while(now N j L){ //forward to downmatrix[i][j] A[now];j--;}while(now N i U){ //forward to leftmatrix[i][j] A[now];i--;}U;D--;L;R--;i;j;if(now N - 1) matrix[i][j] A[now];}for(int i 1; i m; i){for(int j 1; j n; j){printf(%d,matrix[i][j]);if(j n) printf( );else printf(\n);}}return 0;
} //网上的代码暂留
#includeiostream
#includecstdio
#includealgorithm
#includecmath
#includecstring
#includecctype
using namespace std;
int n;
void solve(){int a[n];for(int i0;in;i){scanf(%d,a[i]);}sort(a,an);int xsqrt(n),m;while(n%x){x--;}mn/x;int t[m][x];for(int side0,kn-1;side*2x;side){for(int jside;jx-side;j){t[side][j]a[k--];}for(int iside1;im-side;i){t[i][x-1-side]a[k--];}for(int jx-2-side;jside;j--){t[m-1-side][j]a[k--];}if(x-1-sideside){for(int im-2-side;iside1;i--){t[i][side]a[k--];}}}for(int i0;im;i){for(int j0;jx;j){printf(%d,t[i][j]);if(j1x){printf( );}}printf(\n);}
}
int main(){scanf(%d,n);solve();return 0;
} 转载于:https://www.cnblogs.com/wanghao-boke/p/10381031.html