Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión

 
Búsqueda Avanzada

15.707 Mensajes en 3.130 Temas- por 371 Usuarios - Último usuario: lasfirrot
Mayo 22, 2012, 08:58:07
Foro de Hispabyte.netProgramaciónCompeticiones de programación y algorítmicaOlimpiada Informática Española / IOITema: problema oie rastreador
Páginas: [1]   Ir Abajo
Imprimir
Autor Tema: problema oie rastreador  (Leído 982 veces)
0 Usuarios y 2 Visitantes están viendo este tema.
llos
Novato
*
Mensajes: 5


Ver Perfil
« : Diciembre 27, 2009, 08:08:23 »


Hola, no entiendo que fallo tengo en este problema no es complicado pero no se...


os dejo el post i opinais:


Código:
#include <iostream>
#include <vector>
using namespace std;

double angulo (string s) {
    int n = s.size();
    bool sortir = false;
    int pos;
    for (int i = n - 1; i >= 0 and not sortir; --i) {
        if (s[i] == '1') sortir = true;
        pos = i;
    }  
    pos = double(n) - double(pos);
    return (90 - 180*(double((double(pos) - 1)/(double(n) - 1))));
}

string transformar(string s) {
    long int n = 0;
    int k = s.size();
    long int deu = 1;
    for (int i = k - 1; i >= 0; --i) {n += (s[i] - '0')*deu;deu *= 10;}
    int i = 0;
    vector <char> n2(1000000);
    for (;n>0;n/=2) {
      n2[i] = (n%2)+'0';
      ++i;
    }
    string s2(i,'0');
    for (int j = i - 1; j >= 0; --j) s2[j] = n2[i - 1 - j];
    return s2;
}

int main() {  
    int y;
    cin >> y;
    string x;
    while (y > 0) {
        cin >> x;
        if (x[0] == '1' and x.size() == 10) cout << int (angulo(x)) << endl;
        else  cout << int (angulo(transformar(x))) << endl;  
        --y;
    }
}

En línea
anita
Visitante
« Respuesta #1 : Diciembre 27, 2009, 08:53:13 »

Hola!

Que problema tienes? Que no te funciona correctamente? Cual es el enunciado del programita que has hecho? Asi te puedo echar una manita mejor  Gi&ntilde;ar
En línea
llos
Novato
*
Mensajes: 5


Ver Perfil
« Respuesta #2 : Diciembre 27, 2009, 09:22:29 »

el programa que he puesta es una solucion del programa de la pagina del oie que se llama rastreador


lo he adjuntado el enunciado...pero es que la solucion con este codigo da exactamente igual que las propuestas pero cuando lo envio me da incorrecto asi que no se... weno cabe decir que los casos binarios me dan correctos pero no los casos decimales (eso una vez enviado) pero las entradas propuestas me dan todas bien

* rastreador(2).pdf (28.83 KB - descargado 136 veces.)
« Última modificación: Diciembre 27, 2009, 09:24:36 por llos » En línea
anita
Visitante
« Respuesta #3 : Diciembre 27, 2009, 10:21:12 »

Pues mirando el problema no veo ningún error aparente, lo único que revises la función de pasar números de base 10 a base 2, con números grandes y en los límites que te define el problema, a ver si eso te genera correctamente el número binario que luego pasas a la función de generar el resultado. Ya que por lo que me comentas parece que por ahi podría estar el error.

Ya me dices que tal vas  Gi&ntilde;ar
En línea
llos
Novato
*
Mensajes: 5


Ver Perfil
« Respuesta #4 : Diciembre 27, 2009, 10:43:30 »

he provado el numero mas grande... i me da bien asi que por rangos no es...
En línea
HQH
Administrator
Miembro Imprescindible
*****
Mensajes: 1.813



Ver Perfil
« Respuesta #5 : Diciembre 27, 2009, 10:47:07 »

En principio, los puntos claves los haces bien

1) Redondear a cero
2) Observas que si es numero el tamaño siempre es mejor que 9 y asi distingues un tipo de otros

No veo a simple vista problema en tu codigo, pero los errores pueden venir
1) Por la conversion decimal/binario
2) Precision en la division y el redondeo (Aunque lo dudo).
3) No queda claro en el enunciado (y dudo que sea asi, solo es una idea loca) , pero dice "un numero decimal entre 2 y 999999999" ¿Incluira 2.1 por ejemplo?
4) (Menos probable) Error en los juegos de prueba internos.

Si tengo un rato intentare hacerlo yo de cero, a ver que tal me sale.

Si das con la solucion nos dices, un saludo
En línea
llos
Novato
*
Mensajes: 5


Ver Perfil
« Respuesta #6 : Diciembre 27, 2009, 10:53:02 »

perfecto lo de los numeros no creo que sea con decimales... pero no se quiza algun redondeo...ire provando
En línea
Alex Alvarez
Novato
*
Mensajes: 6


Ver Perfil
« Respuesta #7 : Diciembre 27, 2009, 10:53:52 »

Como a ojo no se veía ningún error, he probado y ha sido tal y como pensaba, problemas con los reales. Haces muchas conversiones innecesarias y eso es jugar con fuego Lengua

Te pongo tu mismo código con unas cuantas modificaciones, así obtiene los 100 puntos.
Código:
#include <iostream>
#include <vector>
using namespace std;

double angulo (string s) {
    int n = s.size();
    bool sortir = false;
    int pos;
    for (int i = n - 1; i >= 0 and not sortir; --i) {
        if (s[i] == '1') sortir = true;
        pos = i;
    }   
    pos = n - pos;
    return 90.0 - 180.0*double(pos-1)/double(n - 1);
}

string transformar(string s) {
    long int n = 0;
    int k = s.size();
    long int deu = 1;
    for (int i = k - 1; i >= 0; --i) {n += (s[i] - '0')*deu;deu *= 10;}
    int i = 0;
    vector <char> n2(1000000);
    for (;n>0;n/=2) {
      n2[i] = (n%2)+'0';
      ++i;
    }
    string s2(i,'0');
    for (int j = i - 1; j >= 0; --j) s2[j] = n2[i - 1 - j];
    return s2;
}

int main() {   
    int y;
    cin >> y;
    string x;
    while (y > 0) {
        cin >> x;
        if (x[0] == '1' and x.size() == 10) cout << int (angulo(x)) << endl;
        else  cout << int (angulo(transformar(x))) << endl; 
        --y;
    }
}
En línea
HQH
Administrator
Miembro Imprescindible
*****
Mensajes: 1.813



Ver Perfil
« Respuesta #8 : Diciembre 27, 2009, 11:08:11 »

Leccion aprendida, no jugar con fuego con los decimales, aunque cabe decir que "en teoria" tal como lo tenias no debia haber perdida de precision, (ya que solo aplicas conversiones de double o entero a doubles , nunca salvo al final pasas de double a entero ) pero la teoria y la practica a veces difieren Gi&ntilde;ar
En línea
llos
Novato
*
Mensajes: 5


Ver Perfil
« Respuesta #9 : Diciembre 28, 2009, 08:18:47 »

Mercy!!!! jeejjeje esque las conversiones las puse, pq al ver que no me daba estava colapsado i la unica razon que me venia era que no diera bien alguna operacion

gracias cracks!!!
me vereis mas por aqui que quiero hacer bastantes del oie
En línea
Páginas: [1]   Ir Arriba
Imprimir
Foro de Hispabyte.netProgramaciónCompeticiones de programación y algorítmicaOlimpiada Informática Española / IOITema: problema oie rastreador
Ir a:  


Tema diseñado por RJ-45 para Hispabyte.net basado en el
theme famouspadexx v.09 designed by Formado Comprido
Downloable here. My present to padexx.de