PAT(B) 1050 螺旋矩阵(Java:24分)
题目描述
本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。
输入格式
输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 104,相邻数字以空格分隔。
输出格式
输出螺旋矩阵。每行 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分)的更多相关文章
- PAT Basic 1050 螺旋矩阵 (25 分)
本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N:m ...
- 【PAT】B1050 螺旋矩阵(25 分)
实在不觉得递归等方式有什么简单的地方,没错我就是用的最笨的方法模拟. 和我一样的小白看代码应该很容易理解. #include<stdio.h> #include<math.h> ...
- pat乙级1050螺旋矩阵
1.用vector建立二维数组: vector<vector<int>> arr(rows); ; i < rows; i++) arr[i].resize(cols); ...
- PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 凌宸1642
PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 目录 PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) ...
- PAT 1050 螺旋矩阵(25)(代码)
1050 螺旋矩阵(25)(25 分) 本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方 ...
- PAT-乙级-1050. 螺旋矩阵(25)
1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的 ...
- PAT——1050. 螺旋矩阵
本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m- ...
- 1050 螺旋矩阵 (25 分)C语言
本题要求将给定的 N 个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 ...
- PAT 1050. 螺旋矩阵(25)
本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...
随机推荐
- solidworks 学习 (三)
汽车轮毂三维建模
- 微信小程序地图组件
index.wxml <map id="map" markers="{{markers}}" longitude="{{longitude}}& ...
- 解决Git - git push origin master 报错
关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 欢迎大家关注我的微信公众号:「醉翁猫咪」 原因:github仓库中没有README.md文件 解决如下: 重新输入git push ...
- 《Java理解程序逻辑试题分析》
1.以下关于开发java程序的描述错误的是 (). (选择一项) A:开发Java程序的步骤包括:编写源程序.编译.运行 B:编写的Java源程序文件使用 java作为扩展名 C:Java源文件经编译 ...
- 微信小程序 Flex局部元素被挤压问题
关于Flex布局不在此处赘述,需要了解的可以查阅官方文档:基本的布局方法——Flex布局 当使用Flex布局,想实现如下图1的效果时,代码编写如下: 图1: <!-- wxml文件 --> ...
- Linux系统学习(二)一Linux基本操作
一.Linux的目录结构 1.1 Linux的目录结构图 1.2 目录内容 /:这就是根目录.对你的电脑来说,有且只有一个根目录.所有的东西,我是说所有的东西都是从这里开始.举个例子:当你在终端里输入 ...
- 性能测试指标:TPS,吞吐量,并发数,响应时间
性能测试指标:TPS,吞吐量,并发数,响应时间 常用的网站性能测试指标有:TPS.吞吐量.并发数.响应时间.性能计数器等. 并发数并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力. 响 ...
- APP性能测试工具GT的使用总结:app内存测试
APP性能测试工具GT的使用总结:app内存测试 GT(随身调)是APP的随身调测平台,它是直接运行在手机上的“集成调测环境”(IDTE, Integrated Debug Environment). ...
- ubuntu16.04 安装使用meld及问题
本文链接:https://blog.csdn.net/ai_liuliu/article/details/95504095安装meldsudo apt-get install meld启动meld方法 ...
- 007 webpack基本的用法
1.安装node.js 因为webpack是基于node.js的 2.新建目录 3.需求 列表的隔行变色 4.初始化 在终端中使用npm init命令可以自动创建这个package.json文件 n ...