que esta mal ?

Iniciado por MarSalem, 13 Septiembre 2019, 21:54 PM

0 Miembros y 1 Visitante están viendo este tema.

MarSalem

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
insta @marsquarepants

K-YreX

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.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

EdePC

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:



-- 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