PAT——1050. 螺旋矩阵
本题要求将给定的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
没有全对,有一个测试点错误,有两个测试点超时。
package com.hone.basical;
import java.util.Arrays;
import java.util.Scanner;
/**
* 原题目:https://www.patest.cn/contests/pat-b-practise/1049
* @author Xia
* 模拟旋转的方向,四个方向,先将一个个元素都装入到二维数组中
* 部分节点超时
*/
public class basicalLevel1049ArraySum { public static void main(String[] args) { Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a = new int[n];
for (int i = 0; i < a.length; i++) {
a[i] = in.nextInt();
}
//求出矩阵的m,n(使得对应的m-n最小)
int m = n;
int n2 = 1;
for (int i = (int) Math.sqrt(n)+1; i < a.length; i++) {
for (int j = (int) Math.sqrt(n); j > 0 ; j--) {
if (i*j==n) {
if ((i-j)<(m-n2)) {
m = i;
n2 = j;
}
break;
}
}
}
//先将数组排序
Arrays.sort(a); int[][] matrix = new int[m][n2]; //用一个二维数组来装填所有的数组
int i=0,j=0; //i表示行,j表示列
int index = n-1;
while (index>=0) {
//往右移动
for (; index>=0&&j<n2&&matrix[i][j]==0; j++) {
matrix[i][j]=a[index--];
}
i++;
j--; //考虑清楚这里面j--的原因?(因为在跳出循环之后j仍然做了一次加法)
//往下移动
for (; index>=0&&i<m&&matrix[i][j]==0; i++) {
matrix[i][j]=a[index--];
}
i--;
j--;
//往左边移动
for (; index>=0&&j>=0&&matrix[i][j]==0; j--) {
matrix[i][j]=a[index--];
}
i--;
j++;
//往上移动
for (; index>=0&&i>=0&&matrix[i][j]==0; i--) {
matrix[i][j]=a[index--];
}
i++;
j++;
}
for (int p = 0; p < m; p++) {
System.out.print(matrix[p][0]);
for (int q = 1; q < n2; q++) {
System.out.print(" " + matrix[p][q]);
}
System.out.println("");
} } }
PAT——1050. 螺旋矩阵的更多相关文章
- PAT 1050 螺旋矩阵(25)(代码)
1050 螺旋矩阵(25)(25 分) 本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方 ...
- PAT 1050. 螺旋矩阵(25)
本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...
- PAT 1050 螺旋矩阵
https://pintia.cn/problem-sets/994805260223102976/problems/994805275146436608 本题要求将给定的 N 个正整数按非递增的顺序 ...
- PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 凌宸1642
PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 目录 PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) ...
- PAT(B) 1050 螺旋矩阵(Java:24分)
题目链接:1050 螺旋矩阵 (25 point(s)) 题目描述 本题要求将给定的 N 个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上 ...
- PAT-乙级-1050. 螺旋矩阵(25)
1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的 ...
- 1050. 螺旋矩阵(25) pat乙级题
本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m- ...
- PAT Basic 1050 螺旋矩阵 (25 分)
本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N:m ...
- PAT B1050 螺旋矩阵 (25 分)
本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N:m ...
随机推荐
- docker 卸载
1首先搜索已经安装的docker 安装包 [root@localhost ~]# yum list installed|grep docker 或者使用该命令 [root@localhost ~]# ...
- java.lang.StackOverflowError: null
异常信息 java.lang.StackOverflowError: null at sun.misc.FloatingDecimal$BinaryToASCIIBuffer.dtoa(Floatin ...
- Django之ModelForm使用
一:什么是ModelForm呢? Model + Form ==> ModelForm.model和form的结合体,所以有以下功能: 数据验证 数据库操作 model有操作数据库的字段,for ...
- Angular入门教程三
4.6指令(directive) 通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的. 模板中可以使用的东西 ...
- Excel 2016 for Mac
1. Excel for Mac 的 Developer tab下没有XML组,因此无法从xml导入或者导出到xml: 2. Excel for Mac 中没有Mark as Finnal的功能: 3 ...
- Flutter知识点:数据存储之sqflite
sqflite是一款轻量级的关系型数据库,类似SQLite. 在Flutter平台我们使用sqflite库来同时支持Android 和iOS. 使用介绍 1.首选需要在pubspec.yaml 导入库 ...
- MUI框架-10-MUI 数据交互-跳转详情页面
MUI框架-10-MUI 数据交互-跳转详情页面 上一篇介绍了如何实现数据交互,给别人的 API 发送 ajax 请求,我们得到数据,再使用 art-template 模板引擎拼接 HTML,最终实现 ...
- 我的CSDN博客&Github地址
我的 CSDN 博客地址: https://blog.csdn.net/qq_40147863 Github 地址: https://github.com/xpwi
- apache 配置PHP的支持重写伪静态
1.开启rwrite模块 LoadModule rewrite_module modules/mod_rewrite. 允许任何目录使用.htaccess AllowOverride None 改成 ...
- Scratch GUI
原文地址:https://github.com/LLK/scratch-gui/wiki/Getting-Started Getting Started Bryce Taylor edited t ...