PAT乙级练习题B1050. 螺旋矩阵
来源:互联网 发布:淘宝hd版怎么不了图片 编辑:程序博客网 时间:2024/05/20 19:47
题目描述
本题要求将给定的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
题目解析
其实最好是把各个功能模块单独写成子函数,这样调试比较方便;开始写主函数的框架的时候可以把子函数先给一个正确的返回值,这样就可以先测试其他部分是否正确,最后再把这个功能子函数实现。
- 先用一个数组读入给出的数列,进行排序;
- 找出合适的m和n;
- 再建立一个数组,把排序好的数列按照螺旋填进去;
- 输出矩阵。
发现一个更好的填螺旋的方法,见@luoluo
代码
#include<iostream>#include<vector>#include<cmath>#include<algorithm>using namespace std;int main(){ int N, m, n, val; vector<int> list; cin >> N; for (int i = 0; i < N; ++i) { cin >> val; list.push_back(val); } sort(list.begin(), list.end(), [](int a, int b) {return a > b; }); m = n = sqrt(N); while (m*n != N) { if (m*n < N) { ++m; } else { --n; } } vector<int> out(N,0); string direct = "n+"; for (int i = 0,a=0,b=0,m0=0,n0=0,m1=m,n1=n; i < N; ) { if (direct=="n+") { out[a*n + b] = list[i]; ++b; ++i; if (b == n1) { direct = "m+"; ++m0; ++a; --b; } continue; } if (direct == "m+") { out[a*n + b] = list[i]; ++a; ++i; if (a == m1) { direct = "n-"; --n1; --b; --a; } continue; } if (direct == "n-") { out[a*n + b] = list[i]; --b; ++i; if (b == n0 - 1) { direct = "m-"; --m1; --a; ++b; } continue; } if (direct == "m-") { out[a*n + b] = list[i]; --a; ++i; if (a == m0 - 1) { direct = "n+"; ++n0; ++b; ++a; } continue; } } for (int i = 1; i <= N; ++i) { cout << out[i-1]; if (i%n == 0) { cout << endl; } else { cout << " "; } } system("pause"); return 0;}
0 0
- PAT乙级练习题B1050. 螺旋矩阵
- PAT乙级1050 螺旋矩阵
- [PAT-乙级]1050.螺旋矩阵
- 1050. 螺旋矩阵(25)-PAT乙级
- PAT乙级 1050. 螺旋矩阵(25)
- PAT乙级 1050. 螺旋矩阵(25)
- [PAT乙级]1050. 螺旋矩阵(25)
- PAT乙级 1050. 螺旋矩阵(25)
- PAT乙级1050. 螺旋矩阵(25)
- pat 乙级 1050. 螺旋矩阵(25)
- PAT乙级 1050 螺旋矩阵(25)
- PAT乙级—1050. 螺旋矩阵(25)-native
- 1050. 螺旋矩阵(25)-PAT乙级真题
- pat乙级真题 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25) PAT乙级真题
- PAT 乙级练习题.1005
- PAT乙级练习题.1006
- PAT.乙级练习题.1007
- 关于底部虚拟按钮
- 我的Linux书架
- 关于程序不能启动,报告0x0...7B错误
- python-cookbook事件驱动的i/o模型
- 读书笔记-现代操作系统-3储存管理-3.5分页系统中的设计问题
- PAT乙级练习题B1050. 螺旋矩阵
- web设计之:崛起中的九大HTML5开发工具
- Java并发编程:深入剖析ThreadLocal
- 在Pycharm中创建Django开发环境
- 使用Eclipse从数据库逆向生成实体类
- 深圳同城快跑 上机试题02:从文本中读取内容,并统计不同英语单词出现的次数,最后输出到新的文本文件
- 【BZOJ1977】【BJOI2011】严格次小生成树
- 将Centos的yum源更换为国内的阿里云源
- UVA——1600Patrol Robot(A*或普通BFS)