Ejemplos de algoritmos típicos

1. Método recursivo

  • tema:

El problema de los monos que comen melocotones: el mono recogió algunos melocotones el primer día, se comió la mitad y sintió que no eran suficientes, así que se comió uno más. A la mañana siguiente, se comió la mitad de los melocotones restantes y se comió uno mas. A partir de entonces, cada mañana comí media y una de las sobras del día anterior. En la mañana del décimo día, sólo quedaba un melocotón. Se le preguntó cuántos melocotones se recogieron el primer día
.

  • Análisis: supongamos que la cantidad de melocotones del día anterior está representada por d1 y la cantidad de melocotones del día siguiente está representada por d2, entonces, según el significado de la pregunta, d1 = (d2 + 1) * 2.
    Ahora se sabe que solo queda un melocotón el día décimo. Según la fórmula anterior, el número del noveno día se puede calcular como (1+1)*2=4. Es decir, si se conoce el décimo día, se puede calcular la cantidad del noveno día; y luego se puede calcular la cantidad del octavo día en base a la cantidad del noveno día,..., y finalmente la cantidad del día Se puede deducir el primer día.

  • Código:

#include <stdio.h>
int main()
{
    
    
	int day, d1, d2;
	day = 9;//第10天的桃子是已知的,还有9天
	d2 = 1;
	do
	{
    
    
		d1 = (d2 + 1) * 2;//计算前一天的桃子数
		d2 = d1;//将前一天的桃子数作为后一天的桃子数
		--day;
	} while (day > 0);
	printf("第一天摘了%d\n",d1);
	return 0;
}

2. Método iterativo

  • tema:

Utilice el método de iteración de Newton para encontrar las raíces de la ecuación 2x ​​3 - 4x 2 +3x-6=0 cerca de 1,0

  • Análisis: El método de iteración de Newton también se denomina método tangente de Newton y su principio se muestra a continuación.
    Supongamos que la ecuación f(x)=0 tiene una raíz x * . Primero, establezca arbitrariamente un valor x 0 que esté cerca de la raíz x * como la raíz aproximada de la ecuación. Encuentre f (x 0 ) de x 0 y dibuje la línea tangente y 1 , luego la pendiente de la recta tangente en este momento es f ' (x 0 )=f (x 0 )/(x 0 -x 1 ), es decir, x 1 =x 0 -f(x 0 )/f ' (x 0 ) fórmula de iteración; obviamente, x 1 está más cerca de x * que x 0 . Continúe por el punto (x 1 , f(x 1 )) y dibuje una recta tangente a f(x) que intersecte el eje x en x 2,… . Cuando la distancia obtenida entre los dos puntos x i y x i-1 es menor que el error máximo dado, x i se considera la solución aproximada de la ecuación f(x)=0.
    Insertar descripción de la imagen aquí

  • Código:

#include <stdio.h>
#include<math.h>
#define eps 1e-6
int main()
{
    
    
	float x1, x0, f, f1;
	x1 = 1.0;//设定初值
	do
	{
    
    
		x0 = x1;//前一个近似根
		f = ((2 * x0 - 4) * x0 + 3) * x0 - 6;
		f1 = (6 * x0 - 8) * x0 + 3;
		x1 = x0 - f / f1;//由迭代公式求得一个新的近似根
	} while (fab(x1 - x0) > eps);//迭代满足的条件
	printf("%6.2f\n",x1);
	return 0;
}

3. Método exhaustivo

  • tema:

Problema de movimiento de ladrillos: 36 ladrillos, 36 personas para mover. Los hombres mueven 4, las mujeres mueven 3 y dos niños llevan un ladrillo. Se les pide que lo muevan todos a la vez. Pregunte a los hombres, mujeres y niños cuántos tienen cada uno.

  • Análisis: Supongamos que el número de hombres está representado por hombres, el número de mujeres está representado por mujeres y el número de hijos está representado por niños, según el significado de la pregunta se puede determinar: el valor de los hombres es entre 0 y 9, y el valor de mujeres está entre 0 y 12. Entre, el número de hijos es de 36-hombres-mujeres.
  • Código:
#include <stdio.h>
int main()
{
    
    
	int men, women, child;
	for(men=0;men<=9;men++)
		for (women = 0; women <= 12; women++)
		{
    
    
			child = 36 - men - women;
			if(men*4+women*3+child*0.5==36)
				printf("男:%d,女:%d,小孩:%d\n",men ,women,child);
		}
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/m0_74102736/article/details/130674437
Recomendado
Clasificación