【PAT】1105 Spiral Matrix

用的就是是柳大姐的思想:柳姐传送门
先计算行数m和列数n的值,n从根号N的整数部分开始,往前推一直到1,找到第一个满足N % n== 0的,m的值等于N/n~将N个给定的值输入数组a,并将a数组中的值按非递增排序,接着建立m行n列的数组b,填充时按层数填充,一个包裹矩阵的口字型为一层,计算螺旋矩阵的层数level,如果m的值为偶数,层数为m/2,如果m为奇数,层数为m/2+1,所以level = m / 2 + m % 2;因为是从左上角第1个格子开始,按顺时针螺旋方向填充,所以外层for循环控制层数i从0到level,内层for循环按左上到右上、右上到右下、右下到左下、左下到左上的顺序一层层填充,注意内层for循环中还要控制t <= N – 1,因为如果螺旋矩阵中所有的元素已经都填充完毕,就不能再重复填充~填充完毕后,输出整个矩阵~

下面以一个5*4的矩阵为例:(m=5,n=4)

可以看到每一层都需要分为四个步骤进行填充数字。若将元素的下标看成是一个x,y的坐标,我们很容易就可以总结出①②③④遍历过程中x,y的取值范围。其中i表示正在填充第i层,从0开始。

① x:i              y:i ~ n-i-1
② x:i+1 ~ m-i-2    y:n-i-1
③ x:m-1-i          y:n-i-1 ~ i
④ x:m-i-2 ~ i+1    y: i

在每一轮循环遍历的过程中,我们还需要进行 cnt <= N - 1 的判断(否则会有测试点通不过,例如:只有19个元素,13个元素的时候,大家可以试一试)。其中cnt表示已经填充元素的个数,而N表示元素总个数。

AC代码:

#include<bits/stdc++.h>
using namespace std;
vector<int> v;
int cmp(int a, int b) {return a > b;
}
int main() {int N,m,n; scanf("%d", &N);for (int i = 0; i < N; i++) {int temp; scanf("%d", &temp);v.push_back(temp);}sort(v.begin(), v.end(), cmp);n = (int)sqrt(N);while (N%n) n++;//N%n==0时退出循环m = N / n;if (m < n) swap(n, m);//保持m>=n;vector<vector<int> > ans(m, vector<int>(n));int level = n / 2 + n % 2;//计算一共有几层。int cnt = 0;//记录当前数组的下标for (int i = 0; i < level; i++) {//此时开始遍历每一层for (int j = i; j < n - i && cnt <= N - 1; j++)//①ans[i][j] = v[cnt++];for (int j = i + 1; j < m - i - 1 && cnt <= N - 1; j++) //②ans[j][n - 1 - i] = v[cnt++];for (int j = n - i - 1; j >= i && cnt <= N - 1; j--)//③ans[m - i - 1][j] = v[cnt++];for (int j = m - i - 2; j >= i + 1 && cnt <= N - 1; j--)//④ans[j][i] = v[cnt++];}for (int i = 0; i < m; i++) {cout << ans[i][0];for (int j = 1; j < n; j++) {cout<<" "<< ans[i][j];}cout << endl;}
}

【PAT】1105 Spiral Matrix(柳婼的思想详细解读)相关推荐

  1. PAT A1105 Spiral Matrix ——黄师塔前江水东,春光懒困倚微风

    PAT A1105 Spiral Matrix 转圈圈太可怕,想不出来怎么搞,参考了一下,选择了自己比较容易理解的方案 设置上下左右四个边界值(都是可到达的下标),每次填一圈四条边,然后修改边界值和i ...

  2. 1105 Spiral Matrix 给定数组向螺旋矩阵中填入数据

    两个测试用例超时,可直接跳转到 目录 超时点1 超时点2 ​​​​​​​ 要做的事情是,将数组按照非升序/降序,顺时针从外围到内部一圈一圈地把数据填到矩阵中,并打印出来.也就是将数组排好序后,将矩阵的 ...

  3. 1105 Spiral Matrix (25 分)【难度: 一般 / 知识点: 模拟】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805363117768704 又是乙级的原题. #include<b ...

  4. PAT1105:Spiral Matrix

    1105. Spiral Matrix (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue This ti ...

  5. PAT乙级 1094 谷歌的招聘(柳婼代码,测试点1、2、4、5分析)

    从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数. 输入格式: 输入在第一行给出 2 个正整数,分别是 L(不超过 1000 的正整数,为数字长度)和 K(小于 10 的正 ...

  6. LeetCode:Spiral Matrix I II

    Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the matri ...

  7. LeetCode 59 Spiral Matrix II(螺旋矩阵II)(Array)

    版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/5214 ...

  8. LeetCode Spiral Matrix II (生成螺旋矩阵)

     Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. F ...

  9. 59. Spiral Matrix II

    /** 59. Spiral Matrix II * 12.5 by Mingyang* 注意,这里我们说的Matrix就是正方形,不再是长方形了,所以我们会用* 更简单的方法,就是直接上下左右分别加 ...

  10. Spiral Matrix I II

    Spiral Matrix I Given an integer n, generate a square matrix filled with elements from 1 to n^2 in s ...

最新文章

  1. 2022-2028中国快时尚服装市场竞争及发展前景预测报告
  2. 计算程序运行时间(time_t, clock_t)
  3. python自学路线-Python最佳学习路线
  4. 划分字母区间(双指针,贪心)
  5. java.io.IOException: Unable to open sync connection!的解决方案
  6. C语言中strspn()函数和strcspn()函数的对比使用
  7. API生态的发展与机遇:从5000组数据看中国API生态与开发者现状
  8. springmvc的作用:
  9. 【数据科学系统学习】机器学习算法 # 西瓜书学习记录 [9] 决策树
  10. 并发编程(十四)—— ScheduledThreadPoolExecutor 实现原理与源码深度解析 之DelayWorkQueue...
  11. matlab如何求传递函数的幅值_MATLAB通过传递函数求截止频率
  12. 生活是否永远如此艰辛,还是仅仅童年才如此
  13. 网页或APP抓包请求参数有什么意思,怎么更快的抓包获取这些请求
  14. CSS查漏补缺(一)—页面内容不足铺满屏幕高度和有滚动条时,footer始终保持底部显示
  15. 高位缩量横盘的实战价值
  16. 电子计算机师德风范 论文,师德师风论文2000字
  17. ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the clas
  18. ubuntu 1604 ppa.launchpad.net下载速度慢
  19. 神经网络的主要应用领域,神经网络发展介绍视频
  20. 小米科学计算机上的,计算器+

热门文章

  1. Greensock JavaScript动画教程
  2. 抖音小程序的私域运营
  3. c2c网站开店的流程图_C2C电子商务网站的交易流程
  4. 数字电路技术可能出现的简答题_数字电子技术基础(Ⅰ)-中国大学mooc-试题题目及答案...
  5. java程序员的项目经历如何写,大量教程
  6. 一些常见监控服务如Nagios、Cacti和Zabbix的搭建
  7. cad 计算机图库,CAD超级图库
  8. YYKit-YYModel分析
  9. android 投屏 ipad,安卓手机投屏到ipad上
  10. 数据库文件和文件组的类别