PAT——A1105 Spiral Matrix

题目链接:

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<cstring>
#include<map>
#include<queue>
using namespace std;
#define maxn 10010
int a[maxn];
int b[maxn][maxn];
bool cmp(int a,int b)
{
    return a>b;
}
int main()
{
    int t;
    memset(a,0,sizeof(a));
    scanf("%d",&t);
    for(int i=0;i<t;i++)
    {
        scanf("%d",&a[i]);
    }
    if(t==1)
    {
        printf("%d",a[0]);
        return 0;
    }
    sort(a,a+t,cmp);
    int m=(int)ceil(sqrt(1.0*t));
    int n;
    while(t%m!=0)
    {
        m++;
    }
    n=t/m;
    int now=0;
    int i=1,j=1;
    int R=n,D=m,L=1,U=1;
    while(now<t)
    {
       while(now<t&&j<R)
       {
           b[i][j]=a[now++];
           j++;
       }
       while(now<t&&i<D)
       {
           b[i][j]=a[now++];
           i++;
       }
       while(now<t&&j>L)
       {
           b[i][j]=a[now++];
           j--;
       }
       while(now<t&&i>U)
       {
           b[i][j]=a[now++];
           i--;
       }
       R--;
       D--;
       L++;
       U++;
       i++,j++;//不能少
       if(now==t-1)
       {
           b[i][j]=a[now++];
       }
    }
    for(int i=1;i<=m;i++)
    {
        for(int j=1;j<=n;j++)
        {
            printf("%d",b[i][j]);
            if(j<n)
                printf(" ");
        }
        printf("\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42232118/article/details/82414834