Lenguaje C: encuentre un cierto número en la matriz de Young (la complejidad del tiempo es menor que O (N))

tema:

Hay una matriz de números ( matriz 2D ),

Cada fila de la matriz aumenta de izquierda a derecha , y
la matriz aumenta de arriba a abajo .
Escriba un programa para encontrar si existe un cierto número en dicha matriz.

Requisitos: La complejidad del tiempo es menor que O(N) .

                    

 =========================================================================

                       

Ideas:

Idea general:

(1).

Función personalizada:

           

Darse cuenta de la lógica :

Debido a que es una matriz de Young , el número más a la derecha en una fila es el más grande ,

Si el valor máximo es menor que el valor que está buscando , puede excluir esta fila .

Lo mismo ocurre con las columnas .

                  

Los parámetros de la función reciben el nombre de la matriz bidimensional , el número a buscar ,

El puntero (dirección) de la variable que almacena el número de filas de la matriz y el puntero (dirección) de la variable que almacena el número de columnas de la matriz .

                  

Encuentre el valor máximo de la primera fila de una matriz bidimensional por dos variables ,

              

Usando el bucle while , si no se encuentra el número máximo de filas y el número de columnas de la matriz bidimensional ,

( El número más a la derecha de la fila es la columna más grande , juzgue gradualmente hasta la columna más pequeña )

entonces continúa buscando .

          

(2).

En el ciclo while :

                

Utilice la instrucción de juicio condicional if para juzgar si el valor máximo en la primera fila es menor que el valor que está buscando .

          

Si es menor que , entonces esta fila no puede tener el valor que se encuentra , puede excluir esta fila y mover el puntero a la siguiente fila ,

          

Si el valor máximo es mayor que el valor que se va a buscar, entonces el valor está en esta fila y el número de columnas se mueve gradualmente para buscar en una nueva fila .

          

Si el valor a encontrar es directamente igual al valor máximo de la fila o se encuentra ajustando el número de filas y columnas ,

          

Luego establezca el número de filas y columnas encontradas a través del puntero de la variable número de fila y número de columna de la matriz ,

                 

Si no se encuentra después de salir del bucle , establezca la "coordenada" de k en (-1, -1) y no se encontrará la tabla .

                       

(3).

función principal:

          

Dada una matriz de Young ( matriz 2D ),

            

Ingrese el número a encontrar en la matriz ,

               

Establecer las filas y columnas de la matriz .

             

Use una función personalizada para hacer la búsqueda ,

Los parámetros de la función son el nombre de la matriz bidimensional , el número que se buscará ,

El puntero (dirección) de la variable de número de fila de matriz y el puntero (dirección) de la variable de número de columna de matriz .

                      

Imprime la situación correspondiente a través de la situación de búsqueda de la función .

                


                 

primer paso:

Función personalizada:

           

Darse cuenta de la lógica :

Debido a que es una matriz de Young , el número más a la derecha en una fila es el más grande ,

Si el valor máximo es menor que el valor que está buscando , puede excluir esta fila .

Lo mismo ocurre con las columnas .

                  

Los parámetros de la función reciben el nombre de la matriz bidimensional , el número a buscar ,

El puntero (dirección) de la variable que almacena el número de filas de la matriz y el puntero (dirección) de la variable que almacena el número de columnas de la matriz .

                  

Encuentre el valor máximo de la primera fila de una matriz bidimensional por dos variables ,

              

Usando el bucle while , si no se encuentra el número máximo de filas y el número de columnas de la matriz bidimensional ,

( El número más a la derecha de la fila es la columna más grande , juzgue gradualmente hasta la columna más pequeña )

entonces continúa buscando .

                     

Código de implementación:

#include <stdio.h>

//自定义函数:
void young_table_search(int arr[3][3], int k, int* px, int* py)
{
	//通过两个变量找出二维数组第一行的最大值:
	//行和列是从0开始的,
	int x = 0; //二维数组的行,从第一行进行查找
	int y = *py - 1; //二维数组的列,从最大列开始查找,

	//使用 while循环 进行查找:
	while (x<=*px-1 && y>=0)
		//x<=*px-1  -- 未查找到最大行数
		//y>=0  --  未调整到最小列数
	{


	}
}

int main() 
{


	return 0;
}

Darse cuenta de la imagen:

                 


                 

Segundo paso:

En el ciclo while:

                

Utilice la instrucción de juicio condicional if para juzgar si el valor máximo en la primera fila es menor que el valor que está buscando .

          

Si es menor que , entonces esta fila no puede tener el valor que se encuentra , puede excluir esta fila y mover el puntero a la siguiente fila ,

          

Si el valor máximo es mayor que el valor que se va a buscar, entonces el valor está en esta fila y el número de columnas se mueve gradualmente para buscar en una nueva fila .

          

Si el valor a encontrar es directamente igual al valor máximo de la fila o se encuentra ajustando el número de filas y columnas ,

          

Luego establezca el número de filas y columnas encontradas a través del puntero de la variable número de fila y número de columna de la matriz ,

                 

Si no se encuentra después de salir del bucle , establezca la "coordenada" de k en (-1, -1) y no se encontrará la tabla .

                     

Código de implementación:

#include <stdio.h>

//自定义函数:
void young_table_search(int arr[3][3], int k, int* px, int* py)
{
	//通过两个变量找出二维数组第一行的最大值:
	//行和列是从0开始的,
	int x = 0; //二维数组的行,从第一行进行查找
	int y = *py - 1; //二维数组的列,从最大列开始查找,

	//使用 while循环 进行查找:
	while (x<=*px-1 && y>=0)
		//x<=*px-1  -- 未查找到最大行数
		//y>=0  --  未调整到最小列数
	{
		if (arr[x][y] < k)
			//第一行最大值 小于 k
		{
			x++; //排除这一行,移到下一行
		}
		else if (arr[x][y] > k)
			//第一行最大值 大于 k
		{
			y--; //k就在这一行,移到列进行查找
		}
		else
			//找到了:把k的行和列赋给指针px和py
		{
			*px = x;
			*py = y;
			return;
		}
	}
	//自定义未找到的情况:
	*px = -1;
	*py = -1;
}

int main() 
{


	return 0;
}

Darse cuenta de la imagen:

                 


                 

tercer paso:

función principal:

          

Dada una matriz de Young ( matriz 2D ),

            

Ingrese el número a encontrar en la matriz ,

               

Establecer las filas y columnas de la matriz .

             

Use una función personalizada para hacer la búsqueda ,

Los parámetros de la función son el nombre de la matriz bidimensional , el número que se buscará ,

El puntero (dirección) de la variable de número de fila de matriz y el puntero (dirección) de la variable de número de columna de matriz .

                      

Imprime la situación correspondiente a través de la situación de búsqueda de la función .

                     

Código de implementación:

#include <stdio.h>

//自定义函数:
void young_table_search(int arr[3][3], int k, int* px, int* py)
{
	//通过两个变量找出二维数组第一行的最大值:
	//行和列是从0开始的,
	int x = 0; //二维数组的行,从第一行进行查找
	int y = *py - 1; //二维数组的列,从最大列开始查找,

	//使用 while循环 进行查找:
	while (x<=*px-1 && y>=0)
		//x<=*px-1  -- 未查找到最大行数
		//y>=0  --  未调整到最小列数
	{
		if (arr[x][y] < k)
			//第一行最大值 小于 k
		{
			x++; //排除这一行,移到下一行
		}
		else if (arr[x][y] > k)
			//第一行最大值 大于 k
		{
			y--; //k就在这一行,移到列进行查找
		}
		else
			//找到了:把k的行和列赋给指针px和py
		{
			*px = x;
			*py = y;
			return;
		}
	}
	//自定义未找到的情况:
	*px = -1;
	*py = -1;
}

int main() 
{
	//给出一个杨氏矩阵:
	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
	//					1 2 3
	//					4 5 6
	//					7 8 9

	//输入要找的数:
	int k = 0;
	scanf("%d", &k);

	//设置矩阵的行和列:
	int x = 3; //矩阵的行
	int y = 3; //矩阵的列

	//使用自定义函数进行查找:
	young_table_search(arr, k, &x ,&y);

	//根据情况大于相应情况:
	if (x==-1 && y==-1)
		//未找到
	{
		printf("未找到");
	}
	else
		//找到了
	{
		printf("找到了,它的下标为:第%d行 第%d列", x, y);
	}

	return 0;
}

Darse cuenta de la imagen:

                       

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                        

Código final y efecto de implementación

Código definitivo:

#include <stdio.h>

//自定义函数:
void young_table_search(int arr[3][3], int k, int* px, int* py)
{
	//通过两个变量找出二维数组第一行的最大值:
	//行和列是从0开始的,
	int x = 0; //二维数组的行,从第一行进行查找
	int y = *py - 1; //二维数组的列,从最大列开始查找,

	//使用 while循环 进行查找:
	while (x<=*px-1 && y>=0)
		//x<=*px-1  -- 未查找到最大行数
		//y>=0  --  未调整到最小列数
	{
		if (arr[x][y] < k)
			//第一行最大值 小于 k
		{
			x++; //排除这一行,移到下一行
		}
		else if (arr[x][y] > k)
			//第一行最大值 大于 k
		{
			y--; //k就在这一行,移到列进行查找
		}
		else
			//找到了:把k的行和列赋给指针px和py
		{
			*px = x;
			*py = y;
			return;
		}
	}
	//自定义未找到的情况:
	*px = -1;
	*py = -1;
}

int main() 
{
	//给出一个杨氏矩阵:
	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
	//					1 2 3
	//					4 5 6
	//					7 8 9

	//输入要找的数:
	int k = 0;
	scanf("%d", &k);

	//设置矩阵的行和列:
	int x = 3; //矩阵的行
	int y = 3; //矩阵的列

	//使用自定义函数进行查找:
	young_table_search(arr, k, &x ,&y);

	//根据情况大于相应情况:
	if (x==-1 && y==-1)
		//未找到
	{
		printf("未找到");
	}
	else
		//找到了
	{
		printf("找到了,它的下标为:第%d行 第%d列", x, y);
	}

	return 0;
}

lograr efecto

Supongo que te gusta

Origin blog.csdn.net/weixin_63176266/article/details/131878381
Recomendado
Clasificación