TOPIC

A questao esta com 25 % err

tiago abilio asked 6 months ago

include include

int main() {

float n1,n2,n3,n4,vet[4],soma[6];
int i,j,x=0,sair=0,sim=0;

scanf("%f",&n1);
scanf("%f",&n2);
scanf("%f",&n3);
scanf("%f",&n4);

vet[0] = n1;
vet[1] = n2;
vet[2] = n3;
vet[3] = n4;

if(n1 == (n2+n3+n4)){
    printf("YES\n");
}else if(n2 == (n1+n3+n4))
{
    printf("YES\n");
}else if(n3 == (n1+n2+n4))
{
    printf("YES\n");
}else if(n4 == (n1+n2+n3))
{
    printf("YES\n");
}else
{
    for(i=0;i<3;i++){
        for(j=i+1;j<4;j++){
            soma[x] = vet[i] + vet[j];
            x++;
        }
    }

    i = 0;
    while(sair != 1 && i<5)
    {
        j = i+1;
        while(sair != 1 && j<6)
        {
            if(soma[i] == soma[j]){
                sim = 1;
                sair = 1;
            }

            j++;
        }
        i++;
    }

    if(sim == 1)
        printf("YES\n");
    else
    {
        printf("NO\n");
    }
}

return 0;

}

Remember not post solutions. Your post may be reviewed by our moderators.

  • Daniel replied 4 months ago

    Nunca verifique se dois números do tipo float ou double são iguais com o operador ==, pois erros de precisão são muito comuns ao realizar esse tipo de comparação.

    Para contornar esse problema, utilize a variável double ao invés de float e, para verificar se dois números do tipo double são iguais, faça:

    if(abs(a - b) < pow(10, -9)){
      //a e b são iguais
    }

    e não

    if(a == b){
      //erros de precisão ocorrerão e, mesmo que 'a' seja igual a 'b', a igualdade não será confirmada pelo *if*.
    }

    Inclua a biblioteca <math.h> para utilizar a função pow e <stdlib.h> para utilizar o abs.