pat basic 1050
Posted miao-xixixi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pat basic 1050相关的知识,希望对你有一定的参考价值。
pat basic 1050
螺旋矩阵
本来没头绪,后来看了视频,然后有思路了;
思路:总共有四个方向的移动,考虑上下左右边界~
但是,还是不能全通过,害 * - *,搞了四五个小时,还是没找出来。
代码如下:
#include<iostream> #include<cmath> #include<algorithm> using namespace std; int s[10000][10000]={0}; int a[10010]; int main(){ int c,row,col; scanf("%d",&c) ; for( col=sqrt(c);col>0;col--){ if(c%col==0){ row=c/col; break; } } int top=0,bottom=row-1,left=0,right=col-1; for(int i=0;i<c;i++) scanf("%d",&a[i]); int k=0; sort(a,a+c,greater<int>() ); while(top<=bottom&&left<=right) { for(int j=left;j<=right;j++) { s[top][j]=a[k]; k++; } top++; for(int i=top;i<=bottom;i++){ s[i][right]=a[k]; k++; } right--; for(int j=right;j>=left;j--){ s[bottom][j]=a[k]; k++; } bottom--; for(int i=bottom;i>=top;i--){ s[i][left]=a[k]; k++; } left++; } for(int i=0;i<row;i++){ for(int j=0;j<col;j++){ if(j!=col-1) printf("%d ",s[i][j]); else printf("%d ",s[i][j]); } } return 0; }
以上是关于pat basic 1050的主要内容,如果未能解决你的问题,请参考以下文章