• 1050. 螺旋矩阵(25)


    1050. 螺旋矩阵(25)

    时间限制
    150 ms
    内存限制
    65536 kB

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

    输入格式:

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

    输出格式:

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

    输入样例:
    12
    37 76 20 98 76 42 53 95 60 81 58 93
    
    输出样例:
    98 95 93
    42 37 81
    53 20 76
    58 60 76
    

     分析:数放入螺旋矩阵时,先放第一个点;然后循环填数;

        每次循环分为:向右、向下、向左、向上,向一个方向拓展时不超过边界且不进入已填过的点。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int N,m,n;
     5 
     6 bool cmp(int a,int b){
     7     return a>b;
     8 }
     9 int main(){
    10     cin>>N;
    11     for(int t=sqrt(N);t>0;t--){
    12         if(N%t==0){
    13             n=t;
    14             m=N/t;
    15             break;
    16         }
    17     }
    18     int a[N+5]={},b[m+5][n+5]={};
    19     for(int i=0;i<N;i++) scanf("%d",&a[i]);
    20     sort(a,a+N,cmp);
    21     
    22     int i=0,j=0;
    23     b[0][0]=a[0];//第一个点 
    24     for(int cnt=1;cnt<N;){
    25         while(j+1<n&&!b[i][j+1]) b[i][++j]=a[cnt++];//向右 
    26         while(i+1<m&&!b[i+1][j]) b[++i][j]=a[cnt++];//向下 
    27         while(j-1>=0&&!b[i][j-1]) b[i][--j]=a[cnt++];//向左 
    28         while(i-1>=0&&!b[i-1][j]) b[--i][j]=a[cnt++];//向上 
    29     }
    30     
    31     for(int i=0;i<m;i++){
    32         printf("%d",b[i][0]);
    33         for(int j=1;j<n;j++)
    34             printf(" %d",b[i][j]);
    35         printf("
    ");
    36     }
    37     return 0;
    38 }
  • 相关阅读:
    The network bridge on device VMnet0 is not running
    QuickContactBadge去掉三角
    在Android Studio中调用so中的方法
    Android Studio动态调试smali代码
    用AndroidStudio创建so
    Android逆向 破解第一个Android程序
    Java配置----JDK开发环境搭建及环境变量配置
    AndroidKiller报.smali文件丢失问题解决(关闭Android Studio的Instant Run)
    Android逆向 Android平台虚拟机
    Android逆向 APK文件组成
  • 原文地址:https://www.cnblogs.com/Fresh--air/p/8589550.html
Copyright © 2020-2023  润新知