PAT(Basic Level)_1050_螺旋矩阵
2017-07-27 13:30
573 查看
#include<cstdio> #include<cmath> #include<algorithm> #include<functional> using namespace std; int main(){ int N,m,n,nums[10000]; scanf("%d",&N); for(int i=0;i<N;i++){ scanf("%d",nums+i); } sort(nums,nums+N,greater<int>()); //for(int i=0;i<N;i++) printf("%d ",nums[i]); for(int i=sqrt(N);i>0;i--){ if(N%i==0){ n=i; m=N/n; break; } } //printf("%d %d",m,n); int **matrix=new int*[m]; for(int i=0;i<m;i++){ matrix[i]=new int ; } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ matrix[i][j]=0; } } int i=0,dir=0,x=0,y=0; while(i<N){ if(!matrix[x][y]) matrix[x][y]=nums[i++]; switch(dir){ case 0: if(y+1<n && !matrix[x][y+1]) y++; else dir=1; break; case 1: if(x+1<m && !matrix[x+1][y]) x++; else dir=2; break; case 2: if(y-1>=0 && !matrix[x][y-1]) y--; else dir=3; break; case 3: if(x-1>=0 && !matrix[x-1][y]) x--; else dir=0; break; } } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ printf("%d",matrix[i][j]); if(j==n-1) putchar('\n'); else putchar(' '); } } for(int i=0;i<m;i++){ delete[]matrix[i]; } delete[]matrix; return 0; }
相关文章推荐
- [2016/02/27] PAT(Basic Level) Problem 1001-1050 JAVA略解
- PAT BASIC LEVEL 1050. 螺旋矩阵(25)
- PAT乙级(Basic Level)1050(C++)
- PAT basic-level 1050 螺旋矩阵 笔记
- PAT (Basic Level) Practise (中文)1050. 螺旋矩阵(25)
- PAT (Basic Level) Practise (中文) 1050. 螺旋矩阵(25)
- PAT (Basic Level) Practise (中文)1050. 螺旋矩阵(25)
- PAT basic-level 1074 宇宙无敌加法器 笔记
- PAT (Basic Level) Practise (中文) 1003.我要通过!(20)
- PAT (Basic Level) Practise-1021
- PAT (Basic Level) Practise-1031
- PAT (Basic Level) Practise (中文) 1024. 科学计数法 (20)
- PAT乙级(Basic Level)1046(Java)
- 刷题训练——PAT (Basic Level)-1065
- PAT (Basic Level) Practise (中文) 1027. 打印沙漏(20)
- PAT (Basic Level) Practise (中文) 1033. 旧键盘打字(20)
- PAT乙级真题及训练集 PAT (Basic Level) Practise (中文)1006. 换个格式输出整数
- PAT (Basic Level) Practise-1041
- PAT乙级(Basic Level)真题-1005 德才论 (25)
- PAT (Basic Level) Practise (中文) 1057. 数零壹(20)