【PAT】B1050 螺旋矩阵(25 分)

实在不觉得递归等方式有什么简单的地方,没错我就是用的最笨的方法模拟。
和我一样的小白看代码应该很容易理解。

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
int N;
int main(){
    int m,n;scanf("%d",&N);
    int temp=sqrt(N),arr[N];
	for(int i=0;i<N;i++){//输入数据
        scanf("%d",&arr[i]);
    }
	sort(arr,arr+N);
    for(int i=temp;i>=0;i--){//求出hang数》lie数
        if(N%i==0){
            n=i;m=N/i;
            break;
        }
    }
	N--;
    int put[m][n],left=0,right=n-1,up=0,down=m-1;
    while(N>=0){
        for(int i=left;i<=right;i++)
			put[up][i]=arr[N--];
		if(left<=right)up++;
		if(N<0) break;
		for(int i=up;i<=down;i++)
			put[i][right]=arr[N--];
		if(N<0) break;
		if(up<=down)right--;
		for(int i=right;i>=left;i--)
			put[down][i]=arr[N--];
		if(N<0) break;
		if(right>=left)down--;
		for(int i=down;i>=up;i--)
			put[i][left]=arr[N--];
		if(N<0) break;
		if(down>=up)left++;
    }
    for(int i=0;i<m;i++){
        if(i!=0) printf("\n");
        for(int j=0;j<n;j++){
			if(j!=0) printf(" ");
            printf("%d",put[i][j]);
        }
    }
	getchar();
    return  0;
}

posted @ 2018-08-18 12:14  路明天  阅读(367)  评论(0编辑  收藏  举报