我的个人网站 Cheese的个人主页http://www.cheese.ren/
博客来源 http://blog.cheese.ren/70http://blog.cheese.ren/70
欢迎交换友链 :-)
#include <bits/stdc++.h>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main() {
int n, a[10000], x=0, y=0;
cin >> n;
for (int i=0; i<n; i++) {
cin >> a[i];
}
sort(a, a+n, cmp);
for (int i=sqrt(n); i>0; i--) {
if (n % i == 0) {
x = i;
y = n / i;
break;
}
}
int result[y][x], x_d=1, y_d=0, a_pos=0, top_limit=0, bottom_limit=y-1, left_limit=0, right_limit=x-1, x_pos=0, y_pos=0;
for (int i=0; i<n; i++) {
// 向右
if (x_pos > right_limit) {
x_pos--;
top_limit++;
x_d = 0;
y_d = 1;
y_pos += y_d;
x_pos += x_d;
}
// 向下
if (y_pos > bottom_limit) {
y_pos--;
right_limit--;
x_d = -1;
y_d = 0;
y_pos += y_d;
x_pos += x_d;
}
// 向左
if (x_pos < left_limit) {
x_pos++;
bottom_limit--;
x_d = 0;
y_d = -1;
y_pos += y_d;
x_pos += x_d;
}
// 向上
if (y_pos < top_limit) {
y_pos++;
left_limit++;
x_d = 1;
y_d = 0;
y_pos += y_d;
x_pos += x_d;
}
result[y_pos][x_pos] = a[a_pos++];
y_pos += y_d;
x_pos += x_d;
}
for (int i=0; i<y; i++) {
for (int l=0; l<x; l++) {
cout << result[i][l];
if (l != x-1) {
cout << " ";
}
}
cout << endl;
}
return 0;
}