Autor Tema: Problema OIE Segundo grado  (Leído 1353 veces)

Desconectado nachox

  • Novato
  • *
  • Mensajes: 18
    • Ver Perfil
Problema OIE Segundo grado
« en: Enero 30, 2011, 08:37:17 pm »
Hola, este problema me parece muy sencillo, pero no entiendo donde está mi error.
Código: [Seleccionar]
#include<cstdio>
#include<cmath>

using namespace std;

int main()
{
    int a,b,c,d,e,f,r1=0,r2=0,r3=0;
    while(scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f)!=EOF){
        int dis=pow((b+d*(f+e)),2)-4*(a-d)*(c-d*e*f);
        if(dis>0)++r1;
        else if(dis==0)++r2;
        else if(dis<0)++r3;
    }
    printf("%d %d %d\n",r1,r2,r3);
    return 0;
}

Desconectado HQH

  • Administrator
  • Miembro Imprescindible
  • *****
  • Mensajes: 1.856
    • Ver Perfil
Re: Problema OIE Segundo grado
« Respuesta #1 en: Enero 31, 2011, 10:24:14 am »
No recuerdo si la formula esta bien y no lo he probado, pero quizas puede que tengas problemas con la precision.

¿Y si algun resultado es por ejemplo 0.1? y tu al pasarlo a int pierdes esa precision y puede influir en el resultado...

Un saludo.


Desconectado nachox

  • Novato
  • *
  • Mensajes: 18
    • Ver Perfil
Re: Problema OIE Segundo grado
« Respuesta #2 en: Febrero 02, 2011, 05:35:55 am »
El discriminante siempre será un número entero, el problema nos dice que todas las letras a, b, c, d ,e y f lo son. Para que sea una ecuación de segundo grado a!=d, si es que se da el caso que a==d, entonces estaríamos frente a una ecuación de primer grado.
Creo que me complique mucho, este es mi código aceptado:
Código: [Seleccionar]
#include<stdio.h>

int main()
{
    int a,b,c,d,e,f,na,nb,nc,dis,r1=0,r2=0,r3=0;
    while(scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f)!=EOF){
        na=a-d,nb=b+d*(f+e),nc=c-d*e*f;
        dis=nb*nb-4*na*nc;
        if(na!=0 && nb!=0 && nc!=0){
            if(dis>0)++r1;
            else if(dis==0)++r2;
            else if(dis<0)++r3;
        }
        else if(na!=0 && nb==0){
            if(nc!=0){
                if((na>0 && nc<0) || (na<0 && nc>0))++r1;
                else if((na>0 && nc>0) || (na<0 && nc<0))++r3;
            }
            else ++r2;
        }
        else if(na!=0 && nb!=0 && nc==0)++r1;
        else if(na==0 && nb!=0)++r2;
        else if(na==0 && nb==0 && nc!=0)++r3;
    }
    printf("%d %d %d\n",r1,r2,r3);
    return 0;
}
« última modificación: Febrero 02, 2011, 05:40:59 am por nachox »