PAT B1050 Matriz en espiral (25 puntos)

Inserte la descripción de la imagen aquí
Soy demasiado inteligente, no puedo escribir esta pregunta, me refiero al método de controlar los límites en el libro.

#include <cstdio>
#include <algorithm>
using namespace std;

bool cmp(int a, int b){
    
    
	return a > b;
}

int main(){
    
    
	int N;
	scanf("%d", &N);
	
	int m, n;
	for(int i=1; i<=N; i++){
    
    
		if(N % i == 0){
    
    
			m = i;
			n = N / m;
			if(m >= n) break;
		}
	}
	int seq[N];
	for(int i=0; i<N; i++){
    
    
		scanf("%d", &seq[i]);
	}
	if(N == 1){
    
    
		printf("%d", seq[0]);
		return 0;
	} 
	sort(seq, seq+N, cmp);
	int arr[m+1][n+1];
	int i = 1, j = 1, now = 0; 
	int U = 1, D = m, L = 1, R = n;
	while(now != N){
    
    
		while(now!=N && j<R){
    
    
			arr[i][j] = seq[now++];
			j++;
		}
		while(now!=N && i<D){
    
    
			arr[i][j] = seq[now++];
			i++;
		}
		while(now!=N && j>L){
    
    
			arr[i][j] = seq[now++];
			j--;
		}
		while(now!=N && i>U){
    
    
			arr[i][j] = seq[now++];
			i--;
		}
		U++;D--;L++;R--;
		i++;j++;
		if(now == N-1){
    
    
			arr[i][j] = seq[now++];
		}
	}
	for(int i=1; i<=m; i++){
    
    
		for(int j=1; j<=n; j++){
    
    
			printf("%d", arr[i][j]);
			if(j != n) printf(" ");
		}
		printf("\n");
	}
		
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_45964844/article/details/113880179
Recomendado
Clasificación