Autor
|
Tema: (Consulta)Ejercicio de numeros amigos en C - Ayuda! (Leído 3,198 veces)
|
palacio29
Desconectado
Mensajes: 103
|
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: #include <stdio.h> #include <stdlib.h> #define N 9001 void carga(int arreglo[N]); void contador(int arreglo[N]); int suma(int numero); int suma2(int numero2); int main() { int arreglo[N]; printf ("Ingrese arreglo:\n"); carga(arreglo); contador(arreglo); return 0; } void carga(int arreglo[N]) { int numerin=-1,i=0; do { if (numerin!=0) { if (numerin>0) { arreglo[i]=numerin; i++; } } } while (numerin!=0 && i<N); arreglo[i]=0; } void contador(int arreglo[N]) { int numerin,i=0,j=0,numero=0,sumatoria=0,contador=0,numero2=0,sumatoria2=0; for (i=0;arreglo[i]!=0;i++) { numero2=arreglo[i]; ///GUARDO EL NUMERO sumatoria2=suma(numero2); ///HAGO LA SUMATORIA DE DIVISORES DE ESE NUMERO for (j=1;arreglo[j]!=0;j++) { numero=arreglo[j]; ///GUARDO ESTE NUEVO NUMERO sumatoria=suma2(numero); ///HAGO LA SUMATORIA DE DIVISORES DE ESE NUMERO if (numero2==sumatoria && numero==sumatoria2) { contador++; } } } } int suma(int numero2) { for (div=1;div <numero2 ;div ++) { { } } return sumita; } int suma2(int numero) { for (div=1;div <numero ;div ++) { { } } return sumita; }
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
|
|
« Última modificación: 24 Julio 2016, 19:14 pm por palacio29 »
|
En línea
|
|
|
|
palacio29
Desconectado
Mensajes: 103
|
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: #include <stdio.h> #include <stdlib.h> #define N 9001 void carga(int arreglo[N]); void contador(int arreglo[N]); int suma(int numero); int suma2(int numero2); int main() { int arreglo[N]; printf ("Ingrese arreglo:\n"); carga(arreglo); contador(arreglo); return 0; } void carga(int arreglo[N]) { int numerin=-1,i=0; do { if (numerin!=0) { if (numerin>0) { arreglo[i]=numerin; i++; } } } while (numerin!=0 && i<N); arreglo[i]=0; } void contador(int arreglo[N]) { int numerin,i=0,j=0,numero=0,sumatoria=0,contador=0,numero2=0,sumatoria2=0; for (i=0;arreglo[i]!=0;i++) { numero2=arreglo[i]; ///GUARDO EL NUMERO sumatoria2=suma(numero2); ///HAGO LA SUMATORIA DE DIVISORES DE ESE NUMERO for (j=1;arreglo[j]!=0;j++) { numero=arreglo[j]; ///GUARDO ESTE NUEVO NUMERO sumatoria=suma2(numero); ///HAGO LA SUMATORIA DE DIVISORES DE ESE NUMERO if (numero2==sumatoria && numero==sumatoria2) { contador++; } } } } int suma(int numero2) { for (div=1;div <numero2 ;div ++) { { } } return sumita; } int suma2(int numero) { for (div=1;div <numero ;div ++) { { } } return sumita; }
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.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
PHOTOSHOP HACE PAGINAS WEB?? CONSULTA PORFAVOR RESPONDAN AMIGOS..
« 1 2 »
Diseño Gráfico
|
ositocaro
|
13
|
5,550
|
21 Noviembre 2005, 03:09 am
por + enrique ZP
|
|
|
Programa para hallar números amigos
« 1 2 »
Programación General
|
Charderak
|
14
|
23,356
|
27 Junio 2010, 19:26 pm
por Charderak
|
|
|
Hallar numeros amigos
Scripting
|
franncc22
|
3
|
6,777
|
7 Mayo 2011, 20:04 pm
por .:UND3R:.
|
|
|
Ayuda progrma numeros amigos
Programación C/C++
|
skatres
|
8
|
4,646
|
26 Noviembre 2011, 18:04 pm
por skatres
|
|
|
Numeros amigos y numeros perfectos programa en C
Programación C/C++
|
estudiante_1
|
2
|
5,757
|
11 Agosto 2015, 23:51 pm
por estudiante_1
|
|