La prueba de Blue Bridge Cup cuestiona ejercicios básicos salida de retorno de matriz de acceso redondo

Enlace del título: http://lx.lanqiao.cn/problem.page?gpid=T66

Ejercicios básicos de la Blue Bridge Cup

Límite de recursos Límite de
tiempo: 1.0s Límite de memoria: 512.0MB
Descripción del problema El
  número de rondas se toma a lo largo del borde de la matriz. Si hay innumerables disponibles o ya se tomaron en la dirección actual, gire a la izquierda 90 grados. Inicialmente se encuentra en la esquina superior izquierda de la matriz, con la dirección hacia abajo.
Formato de entrada La
  primera fila de entrada son dos enteros positivos m, n no superiores a 200, que representan las filas y columnas de la matriz. Las siguientes m filas yn enteros por fila representan esta matriz.
Formato de
  salida La salida es solo una línea, con un total de números mn. Es el resultado obtenido al tomar la forma redonda de la matriz de entrada. Los números están separados por un espacio, y no debe haber espacios adicionales al final de la línea.
Entrada de muestra
3 3
1 2 3
4 5 6
7 8 9
Salida de muestra
1 4 7 8 9 6 3 2 5
Entrada de muestra
3 2
1 2
3 4
5 6
Salida de muestra
1 3 5 6 4 2

Solución: siempre hay un cierto orden al recorrer la salida: abajo, derecha, arriba, izquierda. . . Forme un bucle, preste atención para controlar el formato de salida y determine si necesita rotar 90 grados. Hasta que se detiene toda la salida de datos. Ingrese directamente el código AC:

#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int s[10009];
int main(int argc, char** argv) {
	int a[210][210];
	int m,n;
	cin>>m>>n;
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	int i=-1,j=0,k=0;
     while(k<m*n)
     {
     	while(a[++i][j]!=-1&&i<m)                //向下 
     	{
     	     if(k==0)
			  {
			  	cout<<a[i][j];
			  }
			  else cout<<' '<<a[i][j];  	
			  k++;
			  a[i][j]=-1;
		}
		i--;
		while(a[i][++j]!=-1&&j<n)        //向右 
		{
			if(k==0) cout<<a[i][j];
			else cout<<' '<<a[i][j];
			k++;
			a[i][j]=-1;
		 } 
		 j--;
		 while(a[--i][j]!=-1&&i>=0)          //向上 
		 {
		 	 cout<<' '<<a[i][j];
		 	 k++;
		 	 a[i][j]=-1;
		 }
		 i++;
		 while(a[i][--j]!=-1&&j>=0)      //向左 
		 {
		 	cout<<' '<<a[i][j];
		 	k++;
		 	a[i][j]=-1;
		 }
		 j++;
	 }
	 cout<<'\n';
	return 0;
}
Publicado 6 artículos originales · Me gusta1 · Visitas 141

Supongo que te gusta

Origin blog.csdn.net/qq_46015269/article/details/105491358
Recomendado
Clasificación