• 5057: 螺旋矩阵


    描述

     

    本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为m行n列,满足条件:m*n等于N;m>=n;且m-n取所有可能值中的最小值。

    输入

     

    输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数。所有数字不超过104,相邻数字以空格分隔。

    输出

     

    输出螺旋矩阵。每行n个数字,共m行。相邻数字以1个空格分隔,行末不得有多余空格。

    样例输入

    样例输出

     

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n,m,num,jishu;
     4 int arr[1010][1010];
     5 vector<int> vec;
     6 bool cmp(int a,int b){
     7     return a>b;
     8 }
     9 int main()
    10 {
    11     cin>>num;
    12     for(int i=sqrt(num);i>=1;i--){
    13         if(num%i==0){
    14             n=max(num/i,i);
    15             m=min(num/i,i);
    16             break;
    17         }
    18     }
    19     for(int i=1,d;i<=num;i++){
    20         cin>>d;
    21         vec.push_back(d);
    22     }
    23     sort(vec.begin(),vec.end(),cmp);
    24     int t=n/2+n%2;
    25     jishu=0;
    26     for(int i=0;i<t;i++){
    27         for(int j=i;j<=m-i-1&&jishu<num;j++){
    28             arr[i][j]=vec[jishu++];
    29         }
    30         for(int j=i+1;j<=n-i-1&&jishu<num;j++){
    31             arr[j][m-i-1]=vec[jishu++];
    32         }
    33         for(int j=m-i-2;j>=i&&jishu<num;j--){   //不实现
    34             arr[n-i-1][j]=vec[jishu++];
    35         }
    36         for(int j=n-i-2;j>=i+1&&jishu<num;j--){
    37             arr[j][i]=vec[jishu++];
    38         }
    39     }
    40     for(int i=0;i<n;i++)
    41     for(int j=0;j<m;j++){
    42         if(j!=0) cout << " ";
    43         cout << arr[i][j];
    44         if(j==m-1){
    45             cout << endl;
    46         }
    47     }
    48     return 0;
    49 }
    View Code
  • 相关阅读:
    KMP算法
    214. Shortest Palindrome
    5. Longest Palindromic Substring
    266. Palindrome Permutation
    Oracle 在not in中使用null的问题
    Oracle SQL性能优化技巧大总结
    EBS trace分析
    从SEQUENCE跳号说起
    使用WebService与Oracle EBS进行集成
    EBS xml publisher中文乱码
  • 原文地址:https://www.cnblogs.com/qq-1585047819/p/10872261.html
Copyright © 2020-2023  润新知