题目链接:1050 螺旋矩阵 (25 point(s))

题目描述

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

输入格式

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

输出格式

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

测试样例

Case 0:

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

Case 1:

5
3 2 4 1 5
5
4
3
2
1

Java代码

/**********************************************************************************
Submit Time Status Score Problem Compiler Run Time User
8/25/2019, 21:41:14 PA 24 1050 Java (openjdk) 177 ms wowpH
Case 7: TLE
**********************************************************************************/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays; public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String[] arr = br.readLine().split(" ");
int[] num = new int[N];
for (int i = 0; i < N; ++i) {
num[i] = Integer.parseInt(arr[i]);
}
Arrays.sort(num); // 所有数字升序排序 int n = (int) Math.sqrt(N); // 开方得到 n 的可能最大值
while (0 != N % n) { // 余数不为0,则 m 不是整数,不合要求
--n; // n 自减
}
int m = N / n; // m × n = N int[][] matrix = new int[m][n]; // m × n 的矩阵
int direction = 0; // 方向,0代表向右,1代表向下,2代表向左,3代表向上
int k1 = 0, k2 = 0; // 矩阵下标
for (int i = N - 1; i >= 0; --i) { // 所有数
matrix[k1][k2] = num[i]; // 赋值给矩阵
switch (direction) { // 方向
case 0: // 向右
if (k2 + 1 < n && 0 == matrix[k1][k2 + 1]) {// 右边未越界且未赋值
++k2; // 向右移动
} else { // 右边越界或已经赋值
++k1; // 向下移动
direction = 1; // 改变方向为向下
}
break;
case 1: // 向下
if (k1 + 1 < m && 0 == matrix[k1 + 1][k2]) {// 下边未越界且未赋值
++k1; // 向下移动
} else { // 下边越界或已经赋值
--k2; // 向左移动
direction = 2; // 改变方向为向左
}
break;
case 2: // 向左
if (k2 - 1 >= 0 && 0 == matrix[k1][k2 - 1]) {// 左边未越界且未赋值
--k2; // 向左移动
} else { // 左边越界或已经赋值
--k1; // 向上移动
direction = 3; // 改变方向为向上
}
break;
default: // 向上
if (k1 - 1 >= 0 && 0 == matrix[k1 - 1][k2]) {// 上边未越界且未赋值
--k1; // 向上移动
} else { // 上边越界或已经赋值
++k2; // 向右移动
direction = 0; // 改变方向为向右
}
}
} for (int i = 0; i < m; ++i) {
for (int j = 0; j < n - 1; ++j) {
System.out.print(matrix[i][j] + " "); // 输出矩阵
}
System.out.println(matrix[i][n - 1]);
}
}
}

提交结果

PAT(B) 1050 螺旋矩阵(Java:24分)的更多相关文章

  1. PAT Basic 1050 螺旋矩阵 (25 分)

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

  2. 【PAT】B1050 螺旋矩阵(25 分)

    实在不觉得递归等方式有什么简单的地方,没错我就是用的最笨的方法模拟. 和我一样的小白看代码应该很容易理解. #include<stdio.h> #include<math.h> ...

  3. pat乙级1050螺旋矩阵

    1.用vector建立二维数组: vector<vector<int>> arr(rows); ; i < rows; i++) arr[i].resize(cols); ...

  4. PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 目录 PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) ...

  5. PAT 1050 螺旋矩阵(25)(代码)

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

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

    1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的 ...

  7. PAT——1050. 螺旋矩阵

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

  8. 1050 螺旋矩阵 (25 分)C语言

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

  9. PAT 1050. 螺旋矩阵(25)

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

随机推荐

  1. solidworks 学习 (三)

    汽车轮毂三维建模

  2. 微信小程序地图组件

    index.wxml <map id="map" markers="{{markers}}" longitude="{{longitude}}& ...

  3. 解决Git - git push origin master 报错

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 欢迎大家关注我的微信公众号:「醉翁猫咪」 原因:github仓库中没有README.md文件 解决如下: 重新输入git push ...

  4. 《Java理解程序逻辑试题分析》

    1.以下关于开发java程序的描述错误的是 (). (选择一项) A:开发Java程序的步骤包括:编写源程序.编译.运行 B:编写的Java源程序文件使用 java作为扩展名 C:Java源文件经编译 ...

  5. 微信小程序 Flex局部元素被挤压问题

    关于Flex布局不在此处赘述,需要了解的可以查阅官方文档:基本的布局方法——Flex布局 当使用Flex布局,想实现如下图1的效果时,代码编写如下: 图1: <!-- wxml文件 --> ...

  6. Linux系统学习(二)一Linux基本操作

    一.Linux的目录结构 1.1 Linux的目录结构图 1.2 目录内容 /:这就是根目录.对你的电脑来说,有且只有一个根目录.所有的东西,我是说所有的东西都是从这里开始.举个例子:当你在终端里输入 ...

  7. 性能测试指标:TPS,吞吐量,并发数,响应时间

    性能测试指标:TPS,吞吐量,并发数,响应时间 常用的网站性能测试指标有:TPS.吞吐量.并发数.响应时间.性能计数器等. 并发数并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力. 响 ...

  8. APP性能测试工具GT的使用总结:app内存测试

    APP性能测试工具GT的使用总结:app内存测试 GT(随身调)是APP的随身调测平台,它是直接运行在手机上的“集成调测环境”(IDTE, Integrated Debug Environment). ...

  9. ubuntu16.04 安装使用meld及问题

    本文链接:https://blog.csdn.net/ai_liuliu/article/details/95504095安装meldsudo apt-get install meld启动meld方法 ...

  10. 007 webpack基本的用法

    1.安装node.js 因为webpack是基于node.js的 2.新建目录 3.需求 列表的隔行变色 4.初始化 在终端中使用npm init命令可以自动创建这个package.json文件  n ...