Exemplos de algoritmos típicos

1. Método de recursão

  • tema:

O problema dos macacos comendo pêssegos: O macaco colheu alguns pêssegos no primeiro dia, comeu metade deles e sentiu que não eram suficientes, então comeu mais um. Na manhã seguinte, ele comeu metade dos pêssegos restantes e comeu mais um. A partir daí, todas as manhãs comi metade e uma das sobras do dia anterior. Na manhã do décimo dia, restava apenas um pêssego. Questionado sobre quantos pêssegos foram colhidos no primeiro dia
.

  • Análise: Suponha que o número de pêssegos no dia anterior seja representado por d1, e o número de pêssegos no dia seguinte seja representado por d2, então de acordo com o significado da questão, d1=(d2+1) * 2.
    Sabe-se agora que resta apenas um pêssego no décimo dia. De acordo com a fórmula acima, o número no nono dia pode ser calculado como (1+1)*2=4. Ou seja, se o décimo dia for conhecido, a quantidade do nono dia pode ser calculada; e então a quantidade do oitavo dia pode ser calculada com base na quantidade do nono dia,..., e finalmente a quantidade do primeiro dia pode ser deduzido.

  • 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:

Use o método de iteração de Newton para encontrar as raízes da equação 2x 3 - 4x 2 +3x-6=0 próximo a 1,0

  • Análise: O método de iteração de Newton também é chamado de método tangente de Newton e seu princípio é mostrado abaixo.
    Suponha que a equação f(x)=0 tenha uma raiz x * . Primeiro, defina arbitrariamente um valor x 0 próximo à raiz x * como a raiz aproximada da equação. Encontre f (x 0 ) de x 0 e desenhe a linha tangente e 1 , então a inclinação da reta tangente neste momento é f ' (x 0 )=f (x 0 )/(x 0 -x 1 ), ou seja, x 1 =x 0 -f(x 0 )/f ' (x 0 ) fórmula de iteração; obviamente, x 1 está mais próximo de x * do que x 0 . Continue através do ponto (x 1 , f(x 1 )) e desenhe uma linha tangente a f(x) que cruza o eixo x em x 2,… . Quando a distância obtida entre os dois pontos x i e x i-1 é menor que o erro máximo dado, x i é considerado a solução aproximada da equação f(x)=0.
    Insira a descrição da imagem aqui

  • 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 exaustivo

  • tema:

Problema de movimentação de tijolos: 36 tijolos, 36 pessoas para mover. Os homens movem 4, as mulheres movem 3 e duas crianças carregam um tijolo. Eles são obrigados a mover tudo de uma vez. Pergunte aos homens, mulheres e crianças quantos cada um deles tem.

  • Análise: Suponha que o número de homens seja representado por homens, o número de mulheres seja representado por mulheres e o número de crianças seja representado por crianças.De acordo com o significado da pergunta, pode-se determinar: o valor dos homens é entre 0 e 9, e o valor das mulheres está entre 0 e 12. Entre, o número de filhos é de 36 homens-mulheres.
  • 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;
}

Acho que você gosta

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