PAT乙级 1050 螺旋矩阵(25)

来源:互联网 发布:怎么监控数据库的变化 编辑:程序博客网 时间:2024/05/20 17:07
/*思路:排序后,用四个while填充 
填充顺序a b c d e f:
       aaa       deb       dfb       ccb

*/
//PAT-1-1050#include <iostream>#include <algorithm>#include <string>#include <math.h>using namespace std;bool compare(int a,int b){    return a>b;}int main(){    int n;    cin>>n;    int num[n];        for (int i=0; i<n; i++) {        scanf("%d",&num[i]);    }    int row=n,col=1;    for (int i=n;i>=sqrt(n) ; i--) {        int j=n/i;        if (i*j==n&&i-j<row-col) {            row=i;            col=j;        }    }    sort(num, num+n, compare);    int result[row][col];    //初始化    for (int i=0; i<row; i++) {        for (int j=0; j<col; j++) {            result[i][j]=0;        }    }       int count=0;    int cur_r=-1,cur_c=-1;//初始化为-1 保证while循环的一致性    /*       aaa       deb       dfb       ccb     */    while (count<row*col) {        cur_r++;        cur_c++;        while (cur_c<col&&result[cur_r][cur_c]==0) {            result[cur_r][cur_c++]=num[count++];        }        cur_c--;        cur_r++;        while (cur_r<row&&result[cur_r][cur_c]==0) {            result[cur_r++][cur_c]=num[count++];        }        cur_r--;        cur_c--;        while (cur_c>=0&&result[cur_r][cur_c]==0) {            result[cur_r][cur_c--]=num[count++];        }        cur_c++;        cur_r--;        while (cur_r>=0&&result[cur_r][cur_c]==0) {            result[cur_r--][cur_c]=num[count++];        }    }        for (int i=0; i<row; i++) {        for (int j=0; j<col; j++) {                        if(j!=col-1) cout<<result[i][j]<<" ";            else cout<<result[i][j];        }        cout<<endl;    }    return 0;}

原创粉丝点击