1050

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,a[10001];
	cin>>n;
	for(int i=0; i<n; i++)
		scanf("%d",&a[i]);
	sort(a,a+n);
	int mm=sqrt(1.0*n),nn;
	for(int i=mm; i<=n; i++) {
		if(n%i==0) {
			mm=i;
			nn=n/mm;
			break;
		}
	}
	if(nn>mm)swap(mm,nn);
	int data[mm][nn];

	int cnt=n-1;
	int i=0,j=-1,q=0;
	while(cnt>=0) {
		while(j+1<nn-q&&cnt>=0) {
			j++;
			data[i][j]=a[cnt--];
			
		}
	
		while(i+1<mm-q&&cnt>=0) {
			i++;
			data[i][j]=a[cnt--];

		}
	
		while(j-1>q-1&&cnt>=0) {
			j--;
			data[i][j]=a[cnt--];
			
		}
	
		while(i-1>q&&cnt>=0) {
			i--;
			data[i][j]=a[cnt--];
			
		}q++;
	}
	for(int i=0; i<mm; i++) {
		for(int j=0; j<nn; j++) {
			if(j!=0)putchar(' ');
			printf("%d",data[i][j]);
		}
		printf("\n");
	}
	return 0;
}

注:評価のMM、NN。
図1に示すように、天井を有する。
2、スワップ。
。3、最初の直接のNシーク。

公開された17元の記事 ウォンの賞賛5 ビュー2372

おすすめ

転載: blog.csdn.net/ilikecarrots/article/details/86987768