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 螺旋矩阵相关推荐

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

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

  2. 用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 ...

  3. 1050. 螺旋矩阵(25)

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

  4. java数组螺旋矩阵从上到下_Java-基础编程(螺旋矩阵乘法表)

    package cn.rick.study; import java.io.BufferedReader; import java.io.InputStreamReader; import java. ...

  5. Java程序练习-螺旋矩阵

    螺旋矩阵时间限制: 1500ms内存限制: 1000kB 描述生成一个NxN(N>0)的旋转矩阵,N从键盘输入,每4个字符输出一个数字,右对齐,从1开始至NxN,顺时针成螺旋状,例如:输入4则生 ...

  6. LeetCode 59. 螺旋矩阵 II LeetCode 54. 螺旋矩阵

    文章目录 1. 题目信息 2. LeetCode 59 解题 3. LeetCode 54. 螺旋矩阵 4.<剑指Offer>面试题29 1. 题目信息 给定一个正整数 n,生成一个包含 ...

  7. 创新工场面试题——输出螺旋矩阵

    前些日子被叫去创新工场面试,经一番面试,面试知道我工程能力较强,算法比较差,就问了我一个算法题:输出螺旋矩阵.哎,这个题以前做过,有大致的想法,但是战场上就是写不出来.悲剧了,今天知道没戏了. 一.定 ...

  8. 螺旋矩阵(递归问题)

    题目描述: Problem Description bLue 有一个长度为 n*n 的序列,现在他想把这个序列填到一个 n*n 的螺旋矩阵中,你能帮助他吗? Input 输入数据有多组(数据组数不超过 ...

  9. 悠然乱弹:螺旋矩阵和蛇型矩阵的悠然版实现

    2019独角兽企业重金招聘Python工程师标准>>> 螺旋矩阵和蛇型矩阵,是两个比较有趣的矩阵,有许多的公司面试题中有出现,这两个题的答案也有许多种,简单问一下度娘,就各自有N种实 ...

最新文章

  1. 【怎样写代码】函数式编程 -- Lambda表达式(一):引出
  2. ​批评代码而不是人!15 年程序员的职场箴言
  3. java变量数据类型_Java——变量和数据类型
  4. 前端之JQuery(一)
  5. MII/MDIO接口详解(转)
  6. 服务器apache远程命令,Linux实例:用socket通讯远程执行命令
  7. python数据类型及使用方法_python 基本数据类型及方法
  8. 单关闭功能_广告弹窗关闭
  9. 基于socket的C语言编程,C语言实现的Socket编程
  10. 隐形Euler方法的java程序_常微分方程的解法 (二): 欧拉(Euler)方法
  11. 2018美团实习笔试
  12. 计算机专业中职生自我鉴定报告,【中职生计算机自我鉴定】应届计算机毕业生自我鉴定...
  13. 假币问题POJ2692
  14. Bootstrap设计可响应式的移动网页
  15. 阿里云天池——SQL训练计划_Task3
  16. 阿里新推出“阿里云网盘”App,有机会干掉“百度网盘”吗?
  17. 手把手教你快速入门 APP 的开发
  18. Java Client Of Apache Atlas
  19. 安卓app之按键美化
  20. 802.11ax 的OFDMA资源分配详解

热门文章

  1. python带你获取视频及弹幕数据~知识点满满(含完整源代码)
  2. PAT 乙级 1058 选择题 python
  3. JVM调优专题-JVM调优参数
  4. oracle时间戳概念,Oracle时间戳数据types
  5. 尚硅谷 --佟刚 SpringData JPA
  6. LBS找外贸客户 外贸怎么找客户
  7. 华为OD面试——机试算法
  8. 【无标题】C语言连续输出输入语句执行跳过的问题
  9. 神经网络是算法还是模型,神经网络 图像相似度
  10. XTransfer外贸收款的六大优势是什么?