UTNianos

Versión completa: Problema con ejercicio de URI
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola a todos,

Estuve intentando resolver el siguiente problema de URI pero no logro que pase el IF:
https://www.urionlinejudge.com.br/judge/.../view/1159

#include <iostream>
using namespace std;

int main() {
int X, suma=0, contador=5;
do {
//leemos el numero
cin>>X;
//repetimos indefinidamente hasta que se hallen 5 numeros consecutivos pares
for ( ; ; ){
//si el numero/numero consecutivo es par..
if (X%2==0){
//..restamos el contador de numeros pares
contador--;
//y sumamos los numeros pares consecutivos
suma=(X+suma);
}
//si el numero introducido es cero, salimos del do-while
if (X==0){
break;}

//sumamos 1 al numero para verificar si su consecutivo es par
X++;
}
} while (contador!=0);
cout <<suma<<endl;
return 0;
}


No comprendo porque una vez ingreso un numero el programa no sigue avanzando. Alguna ayuda?

Gracias
Para quien no tiene ganas de entrar a la URL:
Cita:The program must read an integer X indefinite times (stop when X=0). For each X, print the sum of five consecutive even numbers from X, including it if X is even. If the input number is 4, for example, the output must be 40, that is the result of the operation: 4+6+8+10+12. If the input number is 11, for example, the output must be 80, that is the result of 12+14+16+18+20.
Se queda en un loop infinito en el for. Fijate que la condición que pusiste para que salga es que X sea igual a 0 pero a X siempre le sumás 1.
Otra cosa: el break solamente va a salir del for y no del do-while como pusiste ahi.
(30-06-2016 22:05)Meregistro escribió: [ -> ]Se queda en un loop infinito en el for. Fijate que la condición que pusiste para que salga es que X sea igual a 0 pero a X siempre le sumás 1.

Pero al ingresar cero no tendria que salir del for automaticamente ya que hay un break?
El for tiene que iterar cinco veces. Al ingresar cero tiene que salir del programa, no del lazo interno.
Recordá limpiar el acumulador ("suma") antes de usarlo para un número nuevo.
Te juro que no logro comprender:
1) Hay un do while que se tiene que ejecutar hasta que contador es =0
2) Si contador siempre se resta (y si hay un loop como dicen) el contador en algun momento llega a cero
3) Sin embargo, nunca sale del do while.

Esto significa que el for tiene mas importancia que la condicion establecida en el do-while? Primero tiene que salir del foro para que el do-while verifique la condicion?
Vamos desde el principio: el enunciado pide que cuando se ingresa un número se muestre la suma de los cinco pares siguientes, a menos que se ingrese cero en cuyo caso se termina el programa.
En el código que pusiste se decrementa el contador dentro del for, pero se pregunta si vale cero en el do-while. Posiblemente lo que pasa es que se desborda luego de llegar a cero, todo dentro del for.
De todas formas, tu código está mal planteado. Tenés que ingresar un número, preguntar si es cero, si no lo es, entrar en un for en el que se suman los pares consecutivos, luego del for mostrar el resultado (limpiar el acumulador) y repetir el lazo. Si se ingresa cero, salís del lazo principal.
Es como que hiciste los lazos al revés, el de adentro afuera y viceversa.
URLs de referencia