Prueba escrita de programación en lenguaje C (dos)


Continuando con el blog anterior: preguntas de prueba escritas para programación en lenguaje C (1)

Uno, encuentra el mínimo común múltiplo


Descripción del Título:

  El mínimo común múltiplo del entero positivo A y el entero positivo B se refiere al valor entero positivo más pequeño que puede ser divisible por A y B. Diseñe un algoritmo para encontrar el mínimo común múltiplo de la entrada A y B.

Ingrese una descripción:

Genere el mínimo común múltiplo de A y B.

Ejemplo:

ingresar:

5 7

Producción:

35


Pasos del pensamiento


1. Método uno


Antes de resolver el problema del mínimo común múltiplo, primero entendamos el máximo común divisor.

¿Cómo encontrar el máximo común divisor de dos números?

Inserte la descripción de la imagen aquí

Podemos usar el lanzamiento y la vuelta para dividir en cálculos.

Lanzar y girar y dividir:

Inserte la descripción de la imagen aquí
  Bien, podemos entender el proceso de encontrar el máximo común divisor basado en el proceso de pensamiento en la figura anterior y la introducción de Baidu Baike.

Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí
Ideas:

1. Primero encuentra el máximo común divisor q

2. Calcula el mínimo común múltiplo p


Código de implementación


#include <stdio.h>

int main()
{
    
    
	int a = 0;
	int b = 0;
	int c = 0;
	scanf("%d", &a);
	scanf("%d", &b);

	int m = a;
	int n = b;
	int tmp = 0;
	
   //a存放较大的值
	if (a < b)
	{
    
    
		tmp = a;
		a = b;
		b = tmp;
	}
	
	while (a%b != 0)
	{
    
    
		c = a%b;
		a = b;
		b = c;
	}
	
	if (a%b == 0)
	{
    
    
		c = b;
	}
	printf("%d\n",(m*n)/c);

	return 0;
}

2. Método dos

  i se incrementa en 1 cada vez desde i = a hasta i% a = 0 && i% b = 0, en este momento i es el mínimo común múltiplo.

Código de implementación


#include <stdio.h>

int main()
{
    
    
	int a = 0;
	int b = 0;
	scanf_s("%d%d", &a, &b);
	int tmp = 0;

	//a存放较大的值
	if (a < b)
	{
    
    
		tmp = a;
		a = b;
		b = tmp;
	}

	int i = 0;
	for (i = a; i>0; i++)
	{
    
    
		if (i%a == 0 && i%b == 0)
		{
    
    
			break;
		}
	}
	printf("%d\n", i);
	return 0;
}


2. Encuentra un solo perro


Título del tema:

Buscando un solo perro

Descripción del Título

Solo dos números de una matriz aparecen una vez y todos los demás números aparecen dos veces.

Escribe una función para encontrar estos dos números que solo aparecen una vez.


Pasos para pensar


1. Descubra los dos números que solo aparecen una vez

2. De acuerdo con la ley de los bits binarios, divida estos dos "perros únicos" en nuevas matrices, respectivamente.

3. Descubra los dos perros individuales en los dos grupos de acuerdo con el uso del operador de bits

Inserte la descripción de la imagen aquí

Código de implementación

int main()
{
    
    
	int arr[] = {
    
     1, 2, 3, 4, 5, 6, 4, 3, 2, 1 };

	int sz = sizeof(arr) / sizeof(arr[0]);

	int i = 0;
	int num = 0;
	for (i = 0; i < sz; i++)
	{
    
    
		num ^= arr[i];
	}
	//我们得到了只出现了一次的两个数字的按位异或的结果。

	//根据异或的结果,我们得到这两个数字在二进制第几位开始不同


	//记录下异或结果中1第一次出现的位置pos,将原数组中的数字根据二进制第pos位是1/0进行分组。

	int pos = 0;

	for (i = 0; i < sz; i++)
	{
    
    
		if ((num >> i) == 1)

			pos = i;
	}

    //我们根据这一点,将这两个数字分在两个新的数组中

	
	int n1 = 0;

	int n2 = 0;
	
	//我们将二进制位中第pos位是0的数字分成新的一组

	for (i = 0; i < sz; i++)
	{
    
    
		if (((arr[i] >> pos) & 1) == 0)
			n1 ^= arr[i];  //新数组中的数字全部异或得到那个只出现一次的数字
	}

	//我们将二进制位中第pos位是1的数字分成新的一组

	for (i = 0; i < sz; i++)
	{
    
    
		if (((arr[i] >> pos) & 1) == 1)
			n2 ^= arr[i];  //新数组中的数字全部异或得到那个只出现一次的数字
	}

	printf("%d %d\n", n1, n2);
	
	return 0;
}


Recuerde: ¡Tenga en cuenta el uso de operadores bit a bit en el lenguaje C! !





El tema de hoy se comparte aquí, ¡gracias por su apreciación y atención! ! !





Continuará...

Supongo que te gusta

Origin blog.csdn.net/rain67/article/details/115257197
Recomendado
Clasificación