1050. 螺旋矩阵(25) PAT
2017-05-25 22:39
453 查看
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个空格分隔,行末不得有多余空格。
输入样例:
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
#include <cstdio> #include <iostream> #include <cmath> #include <algorithm> #define MAX 12000 using namespace std; int main(){ int N; int a[MAX]; scanf("%d",&N); for(int i=0;i<N;i++){ scanf("%d",&a[i]); } sort(a,a+N); int m,n; n=sqrt(N); m=N/n; while(m*n!=N){ n--; m=N/n; } int zuo=0,you=n-1,shang=0,xia=m-1; int b[10000][120]; int r_tag=0,c_tag=0; int fx=1; for(int i=N-1;i>=0;i--){ if(fx==1){ b[r_tag][c_tag]=a[i]; //printf("b[%d][%d]=%d\n",r_tag,c_tag,b[r_tag][c_tag]); c_tag++; if(c_tag>you){ //you--; shang++; c_tag--; r_tag++; fx=2; } }else if(fx==2){ b[r_tag][c_tag]=a[i]; //printf("b[%d][%d]=%d\n",r_tag,c_tag,b[r_tag][c_tag]); r_tag++; if(r_tag>xia){ //xia--; you--; r_tag--; c_tag--; fx=3; } }else if(fx==3){ b[r_tag][c_tag]=a[i]; //printf("b[%d][%d]=%d\n",r_tag,c_tag,b[r_tag][c_tag]); c_tag--; if(c_tag<zuo){ xia--; c_tag++; r_tag--; fx=4; } }else if(fx==4){ b[r_tag][c_tag]=a[i]; //printf("b[%d][%d]=%d\n",r_tag,c_tag,b[r_tag][c_tag]); r_tag--; if(r_tag<shang){ zuo++; r_tag++; c_tag++; fx=1; } } } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(j==0){ printf("%d",b[i][j]); }else{ printf(" %d",b[i][j]); } } printf("\n"); } return 0; }
最后一个测试用例可能会出现段错误。
原因是创建的二维数组的行数没有开够。
同样的错误犯了两次,海燕啊,你可长点心呐。
相关文章推荐
- 1050. 螺旋矩阵(25) PAT乙级&&1105. Spiral Matrix (25)PAT甲级
- PAT 1050. 螺旋矩阵(25)
- pat乙级1050. 螺旋矩阵(25)
- 【PAT】B. Spiral Matrix (25) 1050. 螺旋矩阵(25)
- PAT : 1050. 螺旋矩阵(25)
- PAT BASIC LEVEL 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25) PAT乙级真题
- PAT乙级 1050. 螺旋矩阵(25)
- PAT 乙级1050. 螺旋矩阵(25)&&蛇形填数&&51Nod 1283 最小的周长
- 1050. 螺旋矩阵(25)-浙大PAT乙级真题java实现
- PAT乙级 1050. 螺旋矩阵(25)
- PAT-乙级-1050. 螺旋矩阵(25)
- C++ - PAT - 1050. 螺旋矩阵(25)
- PAT乙级1050. 螺旋矩阵(25)
- PAT-A-1050. 螺旋矩阵(25)
- PAT (Basic Level) Practise (中文)1050. 螺旋矩阵(25)
- PAT乙级—1050. 螺旋矩阵(25)-native
- pat 乙级 1050. 螺旋矩阵(25)
- PAT刷题:1050. 螺旋矩阵(25)
- pat乙级真题 1050. 螺旋矩阵(25)