Fortuna izquierdo-derecho base título class3- 8 de la matriz de impresión en zigzag C ++ se dan cuenta

Fortuna izquierdo-derecho base título class3- 8 de la matriz de impresión en zigzag C ++ se dan cuenta

1. Tema

Dada una matriz de la matriz, de manera esta matriz de impresión zigzag de acuerdo con "el", por ejemplo: 1,234,567,891,011,121,314 15 16 "El" número impreso zigzag es: 1,259,634,710,131,411,812 15 16
[reclamación] complejidad espacio adicional es O (1).

Aquí Insertar imagen Descripción

2. Análisis

El título de la forma de matriz de salida, se puede dividir de acuerdo a la dirección de la parte inferior izquierda a la parte superior derecha a las direcciones inferior izquierda y superior derecha dos salidas, la salida puede de hecho ser visto oblicuamente, la dirección del cambio se puede utilizar como variable específica bool. Considere establecer A, B como dos puntos auxiliares, el a principio, B son dos puntos (0,0) de posición de la parte superior izquierda posición de la esquina (0,0).
(1) es una conexión digital entre la salida requerida de AB, salidas los redondos se mueve hacia abajo a la A la derecha, B;
(2) el uso de una variable bool representa la dirección de la impresión, la impresión tomada después de cada ronda de inversa;
(3 ) cuando a es hacia abajo a la extrema derecha, B se mueve hacia el extremo más inferior de la derecha, hasta el final un movimiento a la parte inferior derecha, la salida sigue a la fig.
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción

Aquí Insertar imagen Descripción

código 3. núcleo

Update (1) A, B el punto

aC, BC representa una columna, Ar, Ar significa una fila, cuando se trasladó a la aR extremo más inferior. Cuatro variables de código actualizadas se pueden cambiar para utilizar EXP1 exe2 :? EXP3 puede ser más concisa.

while(aR!=height)
	{
		print(arr,dir,aR,aC,bR,bC);
		if(aC < width - 1)
		{
			aC++;
		}
		else
		{
			aR++;
		}
		if(bR < height - 1)
		{
			bR++;
		}
		else
		{
			bC++;
		}
		dir = !dir;
	}

Número entre (2) Imprimir A, B

Imprimir A, B entre la impresión digital real es A, B números de la conexión cada vez que cambie una fila y números de las columnas pueden ser. Oblicua de izquierda a derecha para imprimir, y B, una reserva la línea, para añadir una fila para seguir imprimiendo hasta que encuentra A. De derecha a izquierda oblicua de impresión, y A, para añadir una fila, una columna para reducir, a continuación, la impresión continúa hasta que se encuentra con una B. La idea inicial es utilizar una posición de grabación variable intermedia y, a continuación, cambiar las variables intermedias para encontrar el siguiente punto hasta la finalización de la impresión, la impresión y no cambiaría las A, B, coordenadas. Entonces creo que esto se puede envasar como parte de una función, la ventaja no se cambia el parámetro argumentos, el cambio directo A, B coordenadas para la impresión sino que también elimina las variables redundantes.

void print(int arr[][width],bool dir,int aR,int aC,int bR,int bC)
{
	if(dir)
		{
			while(bR >= aR)
			{
				cout<<arr[bR--][bC++]<<" ";
			}
		}
		else
		{
			while(aR <= bR)
			{
				cout<<arr[aR++][aC--]<<" ";
			}
		}
}

4. El código completo

#include<iostream>
#define height 4
#define width 4
using namespace std;

void print(int arr[][width],bool dir,int aR,int aC,int bR,int bC)
{
	if(dir)
		{
			while(bR >= aR)
			{
				cout<<arr[bR--][bC++]<<" ";
			}
		}
		else
		{
			while(aR <= bR)
			{
				cout<<arr[aR++][aC--]<<" ";
			}
		}
}

int main()
{
	//int arr[height][width] = {1,2,3,4,5,6,7,8,9};
	int arr[height][width] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
	int aR = 0,aC = 0,bR = 0,bC = 0;
	bool dir = true;
	
	while(aR!=height)
	{
		print(arr,dir,aR,aC,bR,bC);
		if(aC < width - 1)
		{
			aC++;
		}
		else
		{
			aR++;
		}
		if(bR < height - 1)
		{
			bR++;
		}
		else
		{
			bC++;
		}
		dir = !dir;
	}


	system("pause");
	return 0;
}

5. La salida

Aquí Insertar imagen Descripción

Publicado 51 artículos originales · ganado elogios 1 · vistas 1386

Supongo que te gusta

Origin blog.csdn.net/shi_xiao_xuan/article/details/103673365
Recomendado
Clasificación