Este problema consiste en encontrar un numero amigo, por ejemplo todos los divisores de 220 sumandos dan 284, y los divisores de 284 dan 220. Claro que no se toma en cuenta el mismo numero.
220 = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
284 = 1 + 2 + 4 + 71 + 142 = 220
Entrada
La entrada consiste de varios casos de prueba hasta fin de archivo. Cada caso de prueba consiste en un número entero <= 1000.
Salida
Por cada caso de prueba imprima en una linea su número amigo. Si no tiene un amigo imprima -1.
Ejemplos de entrada
2
6
1298
5637
284
7962
220
Ejemplos de salida
-1
6
-1
-1
220
-1
284
Lo que hice fue lo siguiente:
#include <iostream>
using namespace std;
int main()
{
int num, i, sum=0, sum2=0;
cin >> num;
for (i=1; i<num; i++) { if (num%i==0) { sum = sum+i;} }
for (int j=1; j<sum; j++) { if (sum%j ==0) sum2=sum2+j; }
if (sum2 == num) {cout << sum << endl; }
else {cout << "-1"<< endl; }
}
Y EL PROGRAMA ESTA BIEN, PERO AHORA SI PONGO UN WHILE PARA QUE SE REPITA TODO Y ASI PODER HACER LOS 1000 CASOS DE PRUEBA QUE PIDE ... EMPIEZAN A SALIR MAL LOS RESULTADOS, SOLO SALE BIEN EL PRIMER RESULTADO Y DE AHI TODO SALE -1 .. NO SE QUE HACER! AYUDA! POR FAVOR!
POR QUE ESTO ESTA MAL? COMO DEBERIA DE SER?
#include <iostream>
using namespace std;
int main()
{
int num, i, sum=0, sum2=0;
cin >> num;
[b]while (n<=1000)[/b]{
for (i=1; i<num; i++) { if (num%i==0) { sum = sum+i;} }
for (int j=1; j<sum; j++) { if (sum%j ==0) sum2=sum2+j; }
if (sum2 == num) {cout << sum << endl; }
else {cout << "-1"<< endl; }
[b]cin >> num<< endl; } [/b]
}
[MOD] Usar las etiquetas GeShi, al publicar codigo.
Pon el código. Es posible que no inicializes las variables bien, o que no leas correctamente la entrada.
Las variables
i,
sum y
sum2 tienes que inicializarlas dentro del
while para que tengan su valor inicial por cada caso de prueba
Ahora, por la composición del problema, esto parece sacado de un juez en linea, por lo tanto, la manera de leer los datos no creo que sea la correcta, pues cuando te dicen:
CitarLa entrada consiste de varios casos de prueba hasta fin de archivo. Cada caso de prueba consiste en un número entero <= 1000.
No significa que hayan 1000 casos de prueba, sino que van a haber varios casos de prueba donde cada número que te entren va a ser menor o igual a 1000. Por lo tanto tu tienes que ir leyendo hasta el final del archivo los números e ir mostrando el resultado. Algo así como:
MIENTRAS NO FINAL DEL ARCHIVO
HACER
INICIALIZAR VARIABLES
LEER NUMERO
REALIZAR LAS OPERACIONES
DAR RESULTADO
FIN MIENTRAS
Espero que entiendas.
Salu2s