PAT 1050. 螺旋矩阵(25)

来源:互联网 发布:国家工商局网络教学 编辑:程序博客网 时间:2024/06/04 20:04

要想解决本题,要解决以下几个问题:

1. 获得准确的m、n

2. 按照题目的要求,以顺时针螺旋的方式安放元素

代码如下:

#include <iostream>#include <vector>#include <algorithm>using namespace std;int m , n;void Findmn(int N){int i , j;for(i = 2 ; i * i <= N ; i++){if(N % i == 0){j = N / i;if(abs(m - n) > abs (i - j)){m = max(i , j);n = min(i , j);}}}}bool cmp(int a , int b){return a > b;}int main(){int N;cin>>N;vector<int> Nums(N);int i,j;for(i = 0 ; i < N ; i++)cin>>Nums[i];sort(Nums.begin(),Nums.end(),cmp);m = N;n = 1;Findmn(N);vector<vector<int> > W(m);for(i = 0 ; i < m ; i++)W[i].assign(n,0);int m1 = m -1, n1 = n , m2 , n2;vector<int> dx(N),dy(N);i = 0;if(N == 1)cout<<Nums[0]<<endl;else{while(n1){n2 = n1;while(n2--){dx[i] = 0;dy[i++] = 1;}n1--;m2 = m1;while(m2--){dx[i] = 1;dy[i++] = 0;}m1--;if(n1 == 0)break;n2 = n1;while(n2--){dx[i] = 0;dy[i++] = -1;}n1--;m2 = m1;while(m2--){dx[i] = -1;dy[i++] = 0;}m1--;}int x1 = 0 , y1 = -1;for(i = 0 ; i < N ; i ++){x1 += dx[i];y1 += dy[i];W[x1][y1] = Nums[i];}for(i = 0 ; i < m ; i++){cout<<W[i][0];for(j = 1 ; j < n ; j++){cout<<' '<<W[i][j];}cout<<endl;}}system("pause");}



0 0
原创粉丝点击