pta 7-29 螺旋矩阵
7-29 h0121. 螺旋矩阵
给定一个包含 N 个正整数的序列,请你将序列中的元素以非递增顺序填充到螺旋矩阵中。
从左上角的第一个元素开始填充,并按照顺时针方向旋转。
要求矩阵有 m 行 n 列,并且 m,n 满足:
m×n=N,
m≥n,
m−n 尽可能小
输入格式:
第一行包含整数 N,1≤N≤10000。
第二行包含 N 个整数,1≤ 序列中元素 ≤10000。
输入样例:
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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
AC代码
- 大体思路:第一步判断m和n,如果给出的元素个数为素数的话就一行输出。不为素数的话开方求m,n将较大的数赋给行,较小的数赋给列。第二步赋值出螺旋矩阵(借鉴了某大佬的算法),碰壁则换方向。
#include<bits/stdc++.h>
using namespace std;
int h[10010];
int q[1010][1010];
int di[4] = { 0,1,0,-1 };
int dj[4] = { 1,0,-1,0 };
void init(int x, int y)
{int i = 0, j = 0, d = 0;for (int cnt = 0; cnt < x * y; cnt++){if (i + di[d] > x - 1 || j + dj[d] > y - 1 || j + dj[d] < 0 || q[i + di[d]][j + dj[d]])d = (d + 1) % 4;q[i][j] = h[cnt];i += di[d];j += dj[d];}
}
bool isprime(int n)
{if (n == 1) return false;for (int i = 2; i <=int(sqrt(n)); i++){if (n % i == 0)return false;}return true;
}
bool cmp(int a, int b)
{return a > b;
}
int main()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int n,x,y;cin >> n;for (int i = 0; i < n; i++){cin >> h[i];}sort(h, h + n, cmp);if (isprime(n)){for (int i = 0; i < n; i++){cout << h[i];if (i < n - 1)cout << " ";}}else{int a = int(sqrt(n));bool find = false;int b = a;if (a * b == n){x=a,y=b;}else{for (int i = a; i >= 1; i--){if (find)break;while (a * b < n){b++;if (a * b == n){find = true;x = b, y = a;break;}}b = a ;}}init(x, y);for (int i = 0; i < x; i++){for (int j = 0; j < y; j++){cout << q[i][j];if (j < y - 1)cout << " ";}cout << "\n";}}return 0;
}
pta 7-29 螺旋矩阵相关推荐
- C++学习之路 | PTA乙级—— 1050 螺旋矩阵 (25 分)(精简)
1050 螺旋矩阵 (25 分) 本题要求将给定的 N 个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第 1 个格子开始,按顺时针螺旋 ...
- 用python做算法_自己用python写的螺旋矩阵生成算法
自己用python写的螺旋矩阵生成算法 如果输入6,可以生成如下矩阵: 1 20 19 18 17 16 2 21 32 31 30 15 3 22 33 36 29 14 4 23 34 35 28 ...
- 1050. 螺旋矩阵(25)
本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...
- java数组螺旋矩阵从上到下_Java-基础编程(螺旋矩阵乘法表)
package cn.rick.study; import java.io.BufferedReader; import java.io.InputStreamReader; import java. ...
- Java程序练习-螺旋矩阵
螺旋矩阵时间限制: 1500ms内存限制: 1000kB 描述生成一个NxN(N>0)的旋转矩阵,N从键盘输入,每4个字符输出一个数字,右对齐,从1开始至NxN,顺时针成螺旋状,例如:输入4则生 ...
- LeetCode 59. 螺旋矩阵 II LeetCode 54. 螺旋矩阵
文章目录 1. 题目信息 2. LeetCode 59 解题 3. LeetCode 54. 螺旋矩阵 4.<剑指Offer>面试题29 1. 题目信息 给定一个正整数 n,生成一个包含 ...
- 创新工场面试题——输出螺旋矩阵
前些日子被叫去创新工场面试,经一番面试,面试知道我工程能力较强,算法比较差,就问了我一个算法题:输出螺旋矩阵.哎,这个题以前做过,有大致的想法,但是战场上就是写不出来.悲剧了,今天知道没戏了. 一.定 ...
- 螺旋矩阵(递归问题)
题目描述: Problem Description bLue 有一个长度为 n*n 的序列,现在他想把这个序列填到一个 n*n 的螺旋矩阵中,你能帮助他吗? Input 输入数据有多组(数据组数不超过 ...
- 悠然乱弹:螺旋矩阵和蛇型矩阵的悠然版实现
2019独角兽企业重金招聘Python工程师标准>>> 螺旋矩阵和蛇型矩阵,是两个比较有趣的矩阵,有许多的公司面试题中有出现,这两个题的答案也有许多种,简单问一下度娘,就各自有N种实 ...
最新文章
- 【怎样写代码】函数式编程 -- Lambda表达式(一):引出
- ​批评代码而不是人!15 年程序员的职场箴言
- java变量数据类型_Java——变量和数据类型
- 前端之JQuery(一)
- MII/MDIO接口详解(转)
- 服务器apache远程命令,Linux实例:用socket通讯远程执行命令
- python数据类型及使用方法_python 基本数据类型及方法
- 单关闭功能_广告弹窗关闭
- 基于socket的C语言编程,C语言实现的Socket编程
- 隐形Euler方法的java程序_常微分方程的解法 (二): 欧拉(Euler)方法
- 2018美团实习笔试
- 计算机专业中职生自我鉴定报告,【中职生计算机自我鉴定】应届计算机毕业生自我鉴定...
- 假币问题POJ2692
- Bootstrap设计可响应式的移动网页
- 阿里云天池——SQL训练计划_Task3
- 阿里新推出“阿里云网盘”App,有机会干掉“百度网盘”吗?
- 手把手教你快速入门 APP 的开发
- Java Client Of Apache Atlas
- 安卓app之按键美化
- 802.11ax 的OFDMA资源分配详解