Título: (Consulta)Ejercicio de numeros amigos en C - Ayuda! Publicado por: palacio29 en 24 Julio 2016, 19:12 pm Hola
Tengo el siguiente ejercicio Realizar una función que reciba como parámetro un arreglo de enteros positivos (cuyo tamaño se desconoce, termina en 0). La función debe retornar la cantidad de parejas de “números amigos” presentes en el arreglo. Dos números amigos son dos números enteros positivos a y b tales que a sea la suma de los divisores propios de b, y b sea la suma de los divisores propios de a. (Divisores propios son todos los divisores menos el propio numero). Un ejemplo es el par de naturales (220, 284), ya que: los divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110, que suman 284; los divisores propios de 284 son 1, 2, 4, 71 y 142, que suman 220. Ej: Para el arreglo a={7,56,1184,2,6232,220,33,11,6368,1210,100,284,0} la función deberá retornar 3 ya que estan presentes las parejas de amigos (1184, 1210), (6232, 6368) y (220, 284),. No debo usar arreglos auxiliares. Hasta ahora hice lo siguiente: Código
Lo que hice fue cargar el arreglo, luego usar un for dentro de un for. En el primer for guarde el numero y realice la sumatoria de divisores del numero, dentro del otro for hice lo mismo y luego hice un if para comparar ambos y si son iguales, suma en el contador El problema es que el resultado siempre me da el doble de lo que me tendria que dar y nose donde esta el error. He probado el codigo de la sumatoria de divisores por separado es correcto. Asi que probablemente el error este en los 2 for pero nose cual es. Si me pueden ayudar se los agradezco Título: Re: (Consulta)Ejercicio de numeros amigos en C - Ayuda! Publicado por: palacio29 en 24 Julio 2016, 19:23 pm Hola Tengo el siguiente ejercicio Realizar una función que reciba como parámetro un arreglo de enteros positivos (cuyo tamaño se desconoce, termina en 0). La función debe retornar la cantidad de parejas de “números amigos” presentes en el arreglo. Dos números amigos son dos números enteros positivos a y b tales que a sea la suma de los divisores propios de b, y b sea la suma de los divisores propios de a. (Divisores propios son todos los divisores menos el propio numero). Un ejemplo es el par de naturales (220, 284), ya que: los divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110, que suman 284; los divisores propios de 284 son 1, 2, 4, 71 y 142, que suman 220. Ej: Para el arreglo a={7,56,1184,2,6232,220,33,11,6368,1210,100,284,0} la función deberá retornar 3 ya que estan presentes las parejas de amigos (1184, 1210), (6232, 6368) y (220, 284),. No debo usar arreglos auxiliares. Hasta ahora hice lo siguiente: Código
Lo que hice fue cargar el arreglo, luego usar un for dentro de un for. En el primer for guarde el numero y realice la sumatoria de divisores del numero, dentro del otro for hice lo mismo y luego hice un if para comparar ambos y si son iguales, suma en el contador El problema es que el resultado siempre me da el doble de lo que me tendria que dar y nose donde esta el error. He probado el codigo de la sumatoria de divisores por separado es correcto. Asi que probablemente el error este en los 2 for pero nose cual es. Si me pueden ayudar se los agradezco Hola, disculpas, ya lo solucione. El problema es que se repetian los valores en el for. Si tengo 1,2,3,4,5,6,7,8,9,10. Y supongamos el 1 y el 4 son parejas...cuando en el for llegue al 4, al analizar el arreglo, me va a tomar el 1 tmb por eso cuenta 2 veces, por eso en el for no tengo que analizar toodo el arreglo sino desde donde se quedo. |