Autor Tema: Juez online  (Leído 1801 veces)

Desconectado 76734556bh

  • Novato
  • *
  • Mensajes: 7
    • Ver Perfil
Juez online
« en: Agosto 22, 2011, 06:03:41 pm »
Soy nuevo en esto de la programación y estoy un poco perdido. En los problemas del juez online, en la misma entrada se dan varios casos sin indicar su número. Por ejemplo en el que tienes que hallar el mcd de dos números. A mi programa se le da una pareja de números, hace el cálculo y se cierra. Cómo puedo hacer para que luego admita una nueva pareja de números?

Desconectado ZiTAL

  • Experto
  • ****
  • Mensajes: 380
    • Ver Perfil
Re: Juez online
« Respuesta #1 en: Agosto 22, 2011, 08:16:46 pm »
Pues pon una pregunta al finalzar el programa y si la respuesta es sí, vuelves a ejecutar el programa, por ejemplo:

Código: [Seleccionar]
function main()
{
#calculos ...
respuesta = "¿Quieres ejecutarlo otra vez?"
if(respuesta==true)
{
main()
}
}

Desconectado 76734556bh

  • Novato
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Juez online
« Respuesta #2 en: Agosto 23, 2011, 10:09:02 am »
No me refiero exactamente a eso; yo también había probado a mirarlo así, pero en los problemas del juez online de la olimpiada él te da va introduciendo casos y no sabes cuando va a parar, o eso es lo que he comprobado yo desde mi ignorancia. Por ejemplo este programa: http://www.olimpiada-informatica.org/?cmd=problema&pbm=square
Te va metiendo números para que sepas si son o no cuadrados perfectos. Yo diseño el programa que me hace el proceso 1, 2, 3 o 100 veces, las que hagan falta, pero al pasarle el juez online no sé cuántas van a ser, y no hay manera de darle que lo haga indefinidamente, eso es a lo que me refiero.

Desconectado ZiTAL

  • Experto
  • ****
  • Mensajes: 380
    • Ver Perfil
Re: Juez online
« Respuesta #3 en: Agosto 23, 2011, 10:44:35 am »
No me refiero exactamente a eso; yo también había probado a mirarlo así, pero en los problemas del juez online de la olimpiada él te da va introduciendo casos y no sabes cuando va a parar, o eso es lo que he comprobado yo desde mi ignorancia. Por ejemplo este programa: http://www.olimpiada-informatica.org/?cmd=problema&pbm=square
Te va metiendo números para que sepas si son o no cuadrados perfectos. Yo diseño el programa que me hace el proceso 1, 2, 3 o 100 veces, las que hagan falta, pero al pasarle el juez online no sé cuántas van a ser, y no hay manera de darle que lo haga indefinidamente, eso es a lo que me refiero.

Entonces puede que las repeticiones sean aleatorias, tendría que crear un número aleatorio y hacer la pregunta N veces, donde N es el número aleatorio.

PD: No tengo ni idea de "juez online" ni las olimpiadas ni nada :S

Desconectado HQH

  • Administrator
  • Miembro Imprescindible
  • *****
  • Mensajes: 1.856
    • Ver Perfil
Re: Juez online
« Respuesta #4 en: Agosto 23, 2011, 12:57:53 pm »
Yo te respondo, el juez te envia los problemas como si fuera un fichero de texto.

Cuando el fichero "acaba" manda un EOF (End of file) asi sabes que ha acabado el juez de enviarte cosas.

Un ejemplo en C++
Código: [Seleccionar]
int c;
while(cin >> c)
{
    cout << c << endl;
}

En este ejemplo, leeria numeros hasta que no hubiera mas,
Cuando no hubiera mas no se cumpliria el while, por lo cual acabaria el programa.

¿En que lenguaje lo estas haciendo? Y te pongo un ejemplo.

Desconectado 76734556bh

  • Novato
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Juez online
« Respuesta #5 en: Septiembre 07, 2011, 05:38:11 pm »
Lo estoy haciendo en C++, y esto me ha sido de ayuda para la mayor parte de los problemas, la duda me surge ahora en el siguiente caso: en los problemas donde se te dice por entrada "un número indefinido de casos" (por ejemplo, en el problema de "piedra, papel, tijera), y en cada uno hay que contabilizar el ganador para finalmente mostrar el marcador. Como le pongo el while(cin>>c) siempre espera que le introduzca otro número y nunca salta al siguiente paso, que es el de mostrar el marcador. Muchas gracias.

Desconectado HQH

  • Administrator
  • Miembro Imprescindible
  • *****
  • Mensajes: 1.856
    • Ver Perfil
Re: Juez online
« Respuesta #6 en: Septiembre 08, 2011, 12:21:36 am »
Si te refieres a este problema http://olimpiada-informatica.org/?cmd=problema&pbm=pie-pa-tij-1
en c++ se puede hacer, pero tienes que tener en cuenta que lo que lees es una cadena, no un numero, pero la forma de funcionar es la misma.

Seria algo mas o menos asi.

Código: [Seleccionar]
#include<iostream>
#include <string>
using namespace std;

int main (void)
{
string s,p;
while(cin >> s)
{
    cin >> p;

// Solucionar problema
}
return 0;
}

Ahora no he probado este codigo, el problema como mucho puede ser el espacio, pero creo que no deberia darte problemas.

Cualquier duda consultala

Desconectado 76734556bh

  • Novato
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Juez online
« Respuesta #7 en: Septiembre 12, 2011, 11:17:00 pm »
Muchas gracias, al menos así me lo acepta el juez online aunque inexplicablemente yo no lo puedo ejecutar, porque siempre queda esperando a recibir nuevos datos de mí y nunca pasa del while (cin>>string1). Muchas gracias. Y ya que el hilo lo titulé juez online aprovecho para preguntar a que se refiere cuando señala error de ejecución. A mí me lo pone en un programa que me funciona sin problemas y no me lo acepta por eso. Gracias.

Desconectado HQH

  • Administrator
  • Miembro Imprescindible
  • *****
  • Mensajes: 1.856
    • Ver Perfil
Re: Juez online
« Respuesta #8 en: Septiembre 14, 2011, 12:35:52 am »
El error de ejecución significa que en algun momento el programa o bien se cuelga, o bien produce una operación no valida (desbordamiento de una variable, division por cero, etc...)

Es posible que con tus juegos de prueba no se cuelgue, pero luego en el juez, utilicen otros juegos de prueba que no has tenido en cuenta y ahi si que se cuelgue.

Hay que testear muy bien los programas realizados para estas competiciones :P

Desconectado nachox

  • Novato
  • *
  • Mensajes: 18
    • Ver Perfil
Re: Juez online
« Respuesta #9 en: Septiembre 14, 2011, 09:37:27 pm »
Hola, esa es mi solución, espero que te sirva  :).
Código: [Seleccionar]
#include<iostream>

using namespace std;

int main()
{
    string jug1,jug2;
    int punt1=0,punt2=0;
    while(cin>>jug1>>jug2){
        if(jug1==jug2)
            ++punt1,++punt2;
        else if(jug1=="piedra" && jug2=="tijeras")
            punt1+=2;
        else if(jug1=="tijeras" && jug2=="papel")
            punt1+=2;
        else if(jug1=="papel" && jug2=="piedra")
            punt1+=2;
        else
            punt2+=2;
    }
    cout<<punt1<<' '<<punt2<<endl;
    return 0;
}