1050. 螺旋矩阵(25)

原创 2018年04月15日 17:10:37

1050. 螺旋矩阵(25)

时间限制
150 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

本题要求将给定的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

螺旋,即选用四个参数标定上下左右的极值,用ij遍历。

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
const int maxn=10001;
int b[maxn][maxn];    int a[maxn];   因为太大了 不能放在主函数里  放在外面就对了  里面b[10001][10001]会因为太大,而出错。

bool cmp(int a,int b){
    return a>b;
}
int main(){
    int N;
    scanf("%d",&N);
    int k=sqrt(N);
    for(int i=k;i>=1;i--){
        if(N%i==0){k=i;break;}
    }
    int m,n;
    n=k;
    m=N/k;

    for(int i=0;i<N;i++){
        scanf("%d",&a[i]);
    }
    sort(a,a+N,cmp);

    int t=0,i=0,j=0;
    int you=n-1,xia=m-1,zuo=0,shang=0;
    while(t<N){
        while(i<=you){
            b[j][i]=a[t];
        //    printf("%d %d %d\n",b[j][i],j,i);
            t++;i++;
        }
        if(t==N){break;}
        shang++;j++;i--;
        while(j<=xia){
            b[j][i]=a[t];
        //    printf("%d %d %d\n",b[j][i],j,i);
            t++;j++;
        }
        if(t==N){break;}
        you--;i--;j--;
        while(i>=zuo){
            b[j][i]=a[t];
       //     printf("%d %d %d\n",b[j][i],j,i);
            t++;i--;
        }
        if(t==N){break;}
        xia--;j--;i++;
        while(j>=shang){
            b[j][i]=a[t];
      //      printf("%d %d %d\n",b[j][i],j,i);
            t++;j--;
        }
        if(t==N){break;}
        zuo++;i++;j++;
    }
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            printf("%d",b[i][j]);
            if(j!=n-1){
                printf(" ");
            }else{
                printf("\n");
            }
        }
    }
    return 0;
}


PAT 1050. 螺旋矩阵(25)

要想解决本题,要解决以下几个问题: 1. 获得准确的m、n 2. 按照题目的要求,以顺时针螺旋的方式安放元素...
  • wudaxiaosheng
  • wudaxiaosheng
  • 2015-12-16 16:13:54
  • 2665

PAT Basic 1050. 螺旋矩阵(25)(C语言实现)

题目 本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为m行n列,满足条件:m*n等于N;m>=n;且m...
  • Oliver__Lew
  • Oliver__Lew
  • 2017-05-18 23:46:34
  • 552

PAT乙级—1050. 螺旋矩阵(25)-native

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

pat B 1050 螺旋矩阵(25)

1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题...
  • HowardEmily
  • HowardEmily
  • 2016-11-29 15:02:54
  • 563

1105. Spiral Matrix (25) / 1050. 螺旋矩阵(25) 考察代码优化,而非算法

1105. Spiral Matrix (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard ...
  • qq_26437925
  • qq_26437925
  • 2016-01-20 14:54:16
  • 465

PAT : 1050. 螺旋矩阵(25)

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

1050. 螺旋矩阵(25) PAT

1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题...
  • qq_34447388
  • qq_34447388
  • 2017-05-25 22:39:05
  • 158

1050. 螺旋矩阵(25)-PAT乙级

题目: 本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为m行n列,满足条件:m*n等于N;m>=n;...
  • ZZLCSDN2017
  • ZZLCSDN2017
  • 2017-04-04 17:25:55
  • 225

PAT 乙级1050. 螺旋矩阵(25)&&蛇形填数&&51Nod 1283 最小的周长

螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按...
  • iamldy
  • iamldy
  • 2017-10-11 18:53:58
  • 78

PAT (Basic Level) Practise (中文) 1050. 螺旋矩阵(25)

1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standa...
  • wdays83892469
  • wdays83892469
  • 2017-09-10 10:23:33
  • 65
收藏助手
不良信息举报
您举报文章:1050. 螺旋矩阵(25)
举报原因:
原因补充:

(最多只允许输入30个字)