Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: MarSalem en 13 Septiembre 2019, 21:54 PM

Título: que esta mal ?
Publicado por: MarSalem en 13 Septiembre 2019, 21:54 PM
construir una funcion que reciba dos numeros enteros positivos y retorne un 1 si estos constituyen un par de numeros amigos y 0 si no lo son.

Código (cpp) [Seleccionar]
#include <stdio.h>

int amigos (int , int);
int main(void){

int A, B;
scanf("%d %d", &A, &B);
printf("son amigos si es 1, si es 0 no lo son == %d", amigos(A,B));
}

int amigos (int A , int B) {
int j;
int i;
int contA=0;
int contB=0;
for (i=1; i<1000; i++)
if(A%i==0){
contA = contA + i;
}
for (j=1; i<1000; i++){
if(B%i==0){
contB = contB + i;
}
if (contA==B && contB==A)
return 1;

else return 0;
}
}



el mio retorna el valor ingresado en la variable A

Mod: Usa etiquetas GeSHi para que tu codigo sea legible
Título: Re: que esta mal ?
Publicado por: K-YreX en 13 Septiembre 2019, 22:10 PM
No me he parado a comprobar qué son dos números amigos pero en el bucle de la B has mezclado la <i> y la <j>. Seguramente eso esté mal.
Título: Re: que esta mal ?
Publicado por: EdePC en 14 Septiembre 2019, 03:09 AM
Saludos,

- Es lo malo de no planificar bien el algoritmo XD. Y un buen IDE también se da cuenta de cosas extrañas, primero lo formateo con Ctrl + Alt + L ya que si vas evitar poner las llaves para los bucles for tienes que formatear bien tu código usando las identaciones o usar siempre llaves, formateando se puede ver un error de concepto bien feo al final:

(https://i.ibb.co/JKrQ3SP/clion.png)

-- Dice, esa variable j nunca se usa, esa variable i++ no tiene sentido, y que es posible que la función termine no devolviendo nada, tu bucle for está inestable.

- Puedes ver el algoritmo en C++ en este vídeo:

[youtube=640,360]https://youtu.be/HmrH6VaDhHQ[/youtube]

- Yo lo terminaría así:

#include <stdio.h>

int amigos(int, int);

int main(void) {
  int A, B;
  scanf("%d %d", &A, &B);
  printf("son amigos si es 1, si es 0 no lo son == %d", amigos(A, B));
}

int amigos(int A, int B) {
  int i;
  int j;
  int contA = 0;
  int contB = 0;
  for (i = 1; i <= A / 2; i++)
    if (A % i == 0) {
      contA = contA + i;
    }
  for (j = 1; j <= B / 2; j++) {
    if (B % j == 0) {
      contB = contB + j;
    }
  }
  if (contA == B && contB == A)
    return 1;
  else return 0;
}


CitarC:\Users\EdSon\CLionProjects\untitled\cmake-build-debug\untitled.exe
220 284
son amigos si es 1, si es 0 no lo son == 1
Process finished with exit code 0