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

输入格式:

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

输出格式:

输出螺旋矩阵。每行 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
//甲级的可以通过,乙级的最后一个测试点没有通过
//运行时间问题,哪里的时间复杂度还可以在优化
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn = 10010;
int matrix[maxn][maxn],A[maxn];
bool cmp(int a,int b){return a > b;
}int main(){int N;scanf("%d",&N);for(int i = 0; i < N; i++){scanf("%d",&A[i]);}sort(A,A+N,cmp);if(N == 1){printf("%d",A[0]);return 0;}int m = (int)ceil(sqrt(1.0*N));while(N % m != 0) m++;int n = N/m,i = 1,j = 1,now = 0; //m is line,n is columnint U = 1,D = m,L = 1,R = n;while(now < N){while(now < N && j < R){ //forward to rightmatrix[i][j] = A[now++];j++;}while(now < N && i < D){matrix[i][j] = A[now++]; //to downi++;}while(now < N && j > L){  //forward to downmatrix[i][j] = A[now++];j--;}while(now < N && i > U){        //forward to leftmatrix[i][j] = A[now++];i--;}U++;D--;L++;R--;i++;j++;if(now == N - 1) matrix[i][j] = A[now++];}for(int i = 1; i <= m; i++){for(int j = 1; j <= n; j++){printf("%d",matrix[i][j]);if(j < n) printf(" ");else printf("\n");}}return 0;
} 

//网上的代码,暂留
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cctype>
using namespace std;
int n;
void solve(){int a[n];for(int i=0;i<n;i++){scanf("%d",&a[i]);}sort(a,a+n);int x=sqrt(n),m;while(n%x){x--;}m=n/x;int t[m][x];for(int side=0,k=n-1;side*2<x;side++){for(int j=side;j<x-side;j++){t[side][j]=a[k--];}for(int i=side+1;i<m-side;i++){t[i][x-1-side]=a[k--];}for(int j=x-2-side;j>=side;j--){t[m-1-side][j]=a[k--];}if(x-1-side>side){for(int i=m-2-side;i>=side+1;i--){t[i][side]=a[k--];}}}for(int i=0;i<m;i++){for(int j=0;j<x;j++){printf("%d",t[i][j]);if(j+1<x){printf(" ");}}printf("\n");}
}
int main(){scanf("%d",&n);solve();return 0;
}

转载于:https://www.cnblogs.com/wanghao-boke/p/10381031.html

1050 螺旋矩阵 (25 分相关推荐

  1. C++学习之路 | PTA乙级—— 1050 螺旋矩阵 (25 分)(精简)

    1050 螺旋矩阵 (25 分) 本题要求将给定的 N 个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第 1 个格子开始,按顺时针螺旋 ...

  2. 【最全解析】1050 螺旋矩阵 (25分)

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 本题要求将给定的 N 个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵&q ...

  3. 【PAT乙级】1050 螺旋矩阵 (25 分)

    题目地址 #include<cstdio> #include<iostream> #include<string> #include<vector> # ...

  4. 1050. 螺旋矩阵(25)

    本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...

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

    本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...

  6. PAT (Basic Level) 1050 螺旋矩阵(模拟)

    题目链接:点击查看 题目大意:给出N个数,降序排序后构造螺旋矩阵,要求行n和列m满足要求n*m==N并且n>m并且(m-n)尽可能小 题目分析:排序后就是简单的蛇形填数了,网上都是用一个whil ...

  7. PAT 乙级练习 1050 螺旋矩阵 - 超级详细的思路讲解

    PAT 乙级练习 题解合集 本题链接 题目 本题要求将给定的 N 个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第 1 个格子开始,按 ...

  8. PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642 题目描述 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下 ...

  9. PAT 乙级 ------ 1046~1050 划拳、编程团体赛、数字加密、数列的片段和、螺旋矩阵附思路和代码

      这个鬼天气欸,又降温到十几度了.看帖子的你,今天也要开心啊!!!PEACE & LOVE 1046 划拳 思路: 每次读取四个数,根据规则求和比较,只有一方胜利一方失败从才会喝酒,同赢同输 ...

最新文章

  1. windows线程同步-原子操作-Interlocked系列函数(用户模式)
  2. 简单快速开发C\S架构程序用最简单的不分层最快的效率达到功能要求的例子程序FrmKnowledge日积月累功能的实现...
  3. Linux内核目录结构(2.6版本以上的kernel)
  4. [工具]-电脑磁盘爆满了,但又不知道哪些文件占用的空间,怎么办?
  5. 潜行者活动硬盘电脑,你也可以打造
  6. wireshrk中的名词说明
  7. JS高级——纯函数、柯里化(手写自动柯里化函数)、组合函数(手写自动组合函数)
  8. CentOS7开放端口号
  9. Kali中firefox浏览器设置中文
  10. Jeecg 平台开发手册下载(20151014)
  11. 8 FI配置-财务会计-把总账科目组的字段状态变式分配给公司代码
  12. redis key命名规范_redis简介
  13. 开源 java CMS - FreeCMS2.7 移动端栏目页静态化
  14. 【Rmarkdown rmysql】
  15. python调用woff_修改Python脚本以批量转换目录中的所有“WOFF”文件
  16. 敌兵布阵——线段树单点修改区间查询
  17. 直播热潮之下的图片社交洼地
  18. 关于0x80070091 目录不是空的
  19. 趣谈C语言(基础篇)
  20. 网页设计颜色及平面设计的常用16进制+RGB色值表参考大全

热门文章

  1. 10.25模拟 三角形
  2. SEO 百度后台主动推送链接
  3. apache camel 相关配置_使用apache camel从表中选择数据-问答-阿里云开发者社区-阿里云...
  4. 服务器旧图片维护,图片服务器
  5. ajax包含mysql吗_php 实例ajax与mysql怎么只查询出一条数据?
  6. c语言入门经典案例,c语言入门经典案例及飞源代码.doc
  7. echarts中triggeron与trigger不能同时出现吗_好物|痛风、血糖高、虚不受补能吃它吗?你想知道的阿胶十问十答一锅出!...
  8. 前端加按钮将图片另存为_Windows 10系统如何将自己的照片制作成文件夹图标
  9. git服务器维护 备份,gitlab服务运维,备份与恢复 - 橙子柠檬's Blog
  10. Java1.5增加了新特性:可变参数