PAT.1050. 螺旋矩阵

原创 2018年04月17日 16:23:07

题目

时间限制
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

分析:

说下大概思路吧,
1.找m,n,既然m-n要求最小,肯定从根号N上下找对吧
2.旋转矩阵,我们可以把一圈看作一个循环,再细分成最上面一排,最后边一排,最下面倒着数一排,最左边倒着数一排,就是找规律,不过需要注意的是,每次循环完都要判断数组是否填充完毕,否则….

代码(cpp):

#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
bool com(int a,int b){
    return a>b;
}
int main(){
    int N,m,n;
    int a[10000+5],b[10000+5];
    int k=0;
    cin>>N;
    for(int i=sqrt((double)N);i>=0;i--)
        if(N%i==0){
            n=i;
            break;
        }
    m=N/n;  //m行n列
    for(int i=0;i<N;i++)
        cin>>a[i];
    sort(a,a+N,com);
    int mm=m,nn=n;
    int top=0,foot=1;
    while(k<=N-1){
        for(int i=top;i<n;i++)
            b[nn*top+i]=a[k++];
        if(k>=N)
            break;
        for(int i=foot;i<m;i++)
            b[i*nn+n-1]=a[k++];
        if(k>=N)
            break;
        for(int i=n-2;i>=top;i--)
            b[(m-1)*nn+i]=a[k++];
        if(k>=N)
            break;
        for(int i=m-2;i>=foot;i--)
            b[i*nn+top]=a[k++];
        m--;
        n--;
        top++;
        foot++;
    }
    int h=0;
    for(int i=0;i<mm;i++){
        for(int j=0;j<nn;j++){
            if(j!=0)
                cout<<" ";
            cout<<b[h++];
        }
        cout<<endl;
    }
    return 0;
}

C++螺旋矩阵C++螺旋矩阵C++螺旋矩阵C++螺旋矩阵

  • 2010年07月19日 12:22
  • 990B
  • 下载

简单的螺旋矩阵的实现

简单地用c++实现螺旋矩阵
  • Edwardwe
  • Edwardwe
  • 2017-02-22 20:46:32
  • 1184

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

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

[LintCode]374.螺旋矩阵

给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。 样例 给定如下矩阵: [ [ 1, 2, 3 ], [ 4, 5, 6 ],...
  • zwy1258432405
  • zwy1258432405
  • 2017-08-18 02:58:25
  • 186

NOIP 2014 螺旋矩阵

递归
  • Orion_Rigel
  • Orion_Rigel
  • 2016-11-02 20:41:19
  • 480

noip2014 螺旋矩阵 (模拟)

P1913螺旋矩阵 Accepted 标签:NOIP普及组2014 描述 一个 n 行 n 列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第 1 行第 1 列)出发,...
  • yuyanggo
  • yuyanggo
  • 2015-11-01 15:05:38
  • 1370

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)

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

螺旋矩阵算法java实现

class TT { public static void main(String[] args) { int m = 5;/*行*/ int n = 6;/*列*/ in...
  • resigshy
  • resigshy
  • 2013-01-28 18:39:35
  • 3165

各种螺旋矩阵

螺旋矩阵 无聊,不知道干点什么,今天就写个关于螺旋矩阵的问题吧,开始的三个螺旋矩阵采用的是同一种方法,后面会有新方法! 由外向内的螺旋矩阵 先来看看普通的螺旋矩阵,由外面向里面螺旋的 如下:...
  • effective_coder
  • effective_coder
  • 2013-04-17 18:33:04
  • 1640
收藏助手
不良信息举报
您举报文章:PAT.1050. 螺旋矩阵
举报原因:
原因补充:

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