PAT乙级1050

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <math.h>
 bool cmp(int a,int b){
 	return a>b;
 }
int main()
{
	int num;
	cin >> num;
	int a;
	int m,n;
	m = 1  ;
	for(int i =2;i<=sqrt(num);i++){
		if(num%i== 0)
		m = i;
	} 
	n = num/m;
	//cout<<"n="<<n<<"   m="<<m;                       
	int aa[n][m];
	vector<int>v;
	cin >> a;
	v.push_back(a);
	while(getchar() != '\n'){
		cin >> a;
	v.push_back(a);
	}
	quicksort(v,0,v.size()-1);
	//sort(v.begin(), v.end(),cmp);
	int i =0,l_row = 0 ,l_column = 0, r_row = n-1,r_column = m-1;
	while(i<num){
		//circal(v,aa,s,t,p, q,i,n,m,flag);
		if (l_row == r_row && l_column == r_column){
			aa[l_row][l_column] = v[i++];//
		}
		else if(l_row == r_row){
			while(l_column<=r_column){
				aa[l_row][l_column++] = v[i++];
			}
		}
		else if(l_column == r_column){
			while(l_row<=r_row){
				aa[l_row++][l_column] = v[i++];
			}
		}
		else {
			int m, n, p, q;
			m = l_row;
			n = l_column;
			p = r_row;
			q = r_column;
			while (n < r_column) {
				aa[m][n++] = v[i++];
			}
			while (m < r_row) {
				aa[m++][n] = v[i++];
			}
			while (l_column < q) {
				aa[r_row][q--] = v[i++];
			}
			while (p > l_row) {
				aa[p--][l_column] = v[i++];
			}
		}
		l_row +=1;
		l_column +=1;
		r_row -=1;
		r_column -=1;
	}
	for(int i = 0;i<m;i++){
		if(i == 0){
			cout<<aa[0][i];
		}
		else{
			cout<<" "<<aa[0][i];
		}
	}
	if(n>1){
		for(int j = 1;j<n;j++){
				cout<<endl;
			for(int i = 0;i<m;i++){
			
				if(i == 0){
					cout<<aa[j][i];
				}
				else{
					cout<<" "<<aa[j][i];
				}
			}
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42673507/article/details/85247699