1050. 螺旋矩阵(25)

来源:互联网 发布:网络舆情相关政策 编辑:程序博客网 时间:2024/05/21 17:09

#include<math.h> //sqrt#include<stdlib.h> //快速排序qsort#include<stdio.h> //指针,malloc#include<iostream>using namespace std;/*1.降序排序  2.算N=m*n,且(m-n)min  3.按 右-下-左-上 填充*/int cmp(const void *a,const void *b){ return  *((int *)a)<*((int *)b)?1:-1; //1表示按a<b,-1表示按a>b}int minFactor(int N){int n=sqrt(N); int j;for(j=n;j>=1;j--){if(N%j==0){return j;}else{continue;}}return -1;}int main(){int N,m,n,i=0,j=0,position=0,direct=0;cin>>N;int * num=(int *) malloc (N*sizeof(int));for(i=0;i<N;i++) cin>>num[i];qsort(num,N,sizeof(int),cmp);if(minFactor(N)!=-1){n=minFactor(N); m=N/n;}else{cout<<"Error!"<<endl;return 0;}int **matrix=(int **) malloc (m*sizeof(int *));for(i=0;i<m;i++){matrix[i]=(int *)malloc(n*sizeof(int));for(j=0;j<n;j++){matrix[i][j]=0;}}i=0,j=0;//一定要重置为0while(position<N){direct%=4;if(direct==0){for(;j<n && matrix[i][j]==0;j++) matrix[i][j]=num[position++];i++;j--;}else if(direct==1){for(;i<m && matrix[i][j]==0;i++) matrix[i][j]=num[position++];i--;j--;}else if(direct==2){for(;j>=0 && matrix[i][j]==0;j--) matrix[i][j]=num[position++];i--;j++;}else{for(;i>=0 && matrix[i][j]==0;i--) matrix[i][j]=num[position++];i++;j++;}direct++;}for(i=0;i<m;i++){for(j=0;j<n;j++){cout<<matrix[i][j];if(j<n-1) cout<<" ";//结尾不能有空格}cout<<endl;}return 0;}


原创粉丝点击