Directorio de artículos
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.
-
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;
}