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.