PAT乙级 1050. 螺旋矩阵(25)
来源:互联网 发布:mac怎么卸载驱动 编辑:程序博客网 时间:2024/05/20 16:40
题目链接:https://www.patest.cn/contests/pat-b-practise/1050
1050. 螺旋矩阵(25)
时间限制
150 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为m行n列,满足条件:m*n等于N;m>=n;且m-n取所有可能值中的最小值。
输入格式:
输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数。所有数字不超过104,相邻数字以空格分隔。
输出格式:
输出螺旋矩阵。每行n个数字,共m行。相邻数字以1个空格分隔,行末不得有多余空格。
输入样例:1237 76 20 98 76 42 53 95 60 81 58 93输出样例:
98 95 9342 37 8153 20 7658 60 76
分析:
1、先确定m和n的值。n是对N开方后向下依次取值确定的。
2、填充矩阵的时候,可以自己手动模拟一下,不复杂的,row为当前行,column为当前列。
#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const int maxn=10000;int a[maxn];int cmp(int a,int b){ return a>b;}int main(){ int N; cin>>N; for(int i=0;i<N;i++) cin>>a[i]; int n=1,m=N; for(int i=(int)sqrt(N);i>=1;i--){//确定m和n if(N%i==0) {n=i;break;} } m=N/n; //cout<<"m="<<m<<' '<<"n="<<n<<endl; sort(a,a+N,cmp); int row=0,column=0,cnt=0; int b[m][n]; memset(b,-1,sizeof(b)); while(cnt<N){//分别为向右、向下、向左、向上 while(column<n&&b[row][column]==-1){ b[row][column]=a[cnt++]; column++; } column--; row++; while(row<m&&b[row][column]==-1){ b[row][column]=a[cnt++]; row++; } row--; column--; while(column>=0&&b[row][column]==-1){ b[row][column]=a[cnt++]; column--; } row--; column++; while(row>=0&&b[row][column]==-1){ b[row][column]=a[cnt++]; row--; } row++; column++; } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(j==0) cout<<b[i][j]; else cout<<' '<<b[i][j]; } cout<<endl; } return 0;}有一个问题,我的排序的比较函数写成
int cmp(int a,int b){ if(a!=b) return a>b;}这样的时候最后一个测试点过不了!
这是什么问题?需要思考。
阅读全文
0 0
- 1050. 螺旋矩阵(25)-PAT乙级
- PAT乙级 1050. 螺旋矩阵(25)
- PAT乙级 1050. 螺旋矩阵(25)
- [PAT乙级]1050. 螺旋矩阵(25)
- PAT乙级 1050. 螺旋矩阵(25)
- PAT乙级1050. 螺旋矩阵(25)
- pat 乙级 1050. 螺旋矩阵(25)
- [PAT-乙级]1050.螺旋矩阵
- PAT乙级—1050. 螺旋矩阵(25)-native
- 1050. 螺旋矩阵(25)-PAT乙级真题
- pat乙级真题 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25) PAT乙级真题
- PAT乙级 1050 螺旋矩阵(25)
- PAT乙级1050 螺旋矩阵
- 1050. 螺旋矩阵(25) PAT乙级&&1105. Spiral Matrix (25)PAT甲级
- PAT 1050. 螺旋矩阵(25)
- PAT 1050. 螺旋矩阵(25)
- PAT 1050.螺旋矩阵(25)
- PAT乙级 1049. 数列的片段和(20)--数学问题
- Tengine健康检查模块配置
- 二叉树面试题之二叉树镜像
- Java NIO原理图文分析及代码实现
- C语言模拟实现atoi函数
- PAT乙级 1050. 螺旋矩阵(25)
- angularjs知识点四指令
- 文章标题 POJ 1789 :Truck History (最小生成树+prim)
- spring整合webService(客户端)
- 我的小小学习笔记(1)之C语言--sizeof&strlen(1)
- RollViewPager图片轮播效果开源框架的使用
- Unknown column 'abc' in 'field lis
- 获取设备信息的工具类
- (96)GUI:鼠标事件、键盘事件、按钮事件、窗体事件