// PATn.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
int main()
{
unsigned cnt;
cin >> cnt;
unsigned tmp;
vector<unsigned> data;
for (size_t i = 0; i < cnt; ++i)
{
cin >> tmp;
data.push_back(tmp);
}
int m, n;
for (unsigned i = sqrt(cnt); i > 0; --i)
{
if ((cnt%i) == 0)
{
unsigned tp = cnt / i;
if (tp > i)
{
m = tp;
n = i;
}
else
{
m = i;
n = tp;
}
break;
}
}
sort(data.begin(), data.end(),greater<unsigned>());
vector<vector<unsigned>> out_data(m,vector<unsigned>(n,0));
unsigned bool_cnt=0;
int i = 0, j = -1;
int m_s = 0, m_x = m;
int n_s = 0, n_x = n;
while (true) //螺旋矩阵的思路,设置行和列的上下范围,通过for模拟顺时针螺旋动作!有没有其他简单方法》?
{
for (i=n_s,j=j+1; i < n_x; ++i)
{
out_data[j][i] = data[bool_cnt];
++bool_cnt;
}
m_s=m_s+1;
if (bool_cnt == cnt)
break;
for (j = m_s, i = i - 1; j < m_x; ++j)
{
out_data[j][i] = data[bool_cnt];
++bool_cnt;
}
n_x = n_x - 1;
if (bool_cnt == cnt)
break;
for (i = n_x - 1, j = j - 1; i >= n_s; --i)
{
out_data[j][i] = data[bool_cnt];
++bool_cnt;
}
m_x = m_x - 1;
if (bool_cnt == cnt)
break;
for (j = m_x-1, i = i + 1; j >=m_s; --j)
{
out_data[j][i] = data[bool_cnt];
++bool_cnt;
}
n_s = n_s + 1;
if (bool_cnt == cnt)
break;
}
for (size_t j=0;j<out_data.size();++j)
{
auto r = out_data[j];
for (size_t i = 0; i < r.size(); ++i)
{
cout << r[i];
if (i != (r.size() - 1))
cout << " ";
}
if (j != (out_data.size() - 1))
cout << endl;
}
system("pause");
return 0;
}
1050
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 瓷砖铺贴时需要一系列的辅料,这些不起眼的辅料却是决定瓷砖铺贴质量的关键因素,下面赶紧跟工长吴彦祖一起来看看贴瓷砖的...