Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: darkeado en 9 Agosto 2015, 17:02 pm



Título: Problema en ejercicio con funciones
Publicado por: darkeado en 9 Agosto 2015, 17:02 pm
Muy buenas, acabo de registrarme en el foro puesto que tengo un problema al que no le veo solución. Estoy haciendo un programa que me devuelva los divisores de 1 al 1000 y me diga cual  de los numeros cuenta con más divisores. Sin embargo siempre me devuelve 60 (con 12 divisores), y conté por ejemplo los de 1000 y me salen 16. Les dejo el código para que le den un vistazo puesto que estoy seguro que encontraran la solución.

Código:
#include <iostream>

using namespace std;

void divisors(int n)
{
    for (int i=1; i<=n; i++)
    {
        if (n%i==0)
            cout << i << endl;
    }
}

long contaDivisors(int n)
{
    long cd=0;
    for (int i=1; i<=n; i++)
    {
        if (n%i==0)
            cd++;
    }
    return cd;
}


int main()
{
    long maxDivisors=0;
    for (int num=1; num<=1000; num++)
    {
        if(contaDivisors(num)>=maxDivisors)
            maxDivisors=num;
        cout << endl << "Els divisors de " << num << " son:" << endl;
        divisors(num);
    }

    cout << "\n\n\n";

    cout << "El nombre mes gran amb mes numero de divisors es el " << maxDivisors << " amb " << contaDivisors(maxDivisors) << " divisors.";

    cout << "\n\n\n";

    return 0;
}

Salud!


Título: Re: Problema en ejercicio con funciones
Publicado por: ivancea96 en 9 Agosto 2015, 17:53 pm
Código
  1. if(contaDivisors(num)>=maxDivisors)
  2.    maxDivisors=num;
Estás guardando en maxDivisors, el número que tiene más divisores. pero en el if(), estás comprobando como si maxDivisors fuera el número de divisores más grande.

Tienes que usar 2 variables diferentes, una para guardar el número de divisores mayor, y otra para guardar el número que tiene esa cantidad de divisores.


Título: Re: Problema en ejercicio con funciones
Publicado por: darkeado en 9 Agosto 2015, 18:57 pm
Cierto!! Muchas gracias


Título: Re: Problema en ejercicio con funciones
Publicado por: exoesqueleto en 9 Agosto 2015, 19:18 pm
brothercito echale un ojo a este codigo que hice:

Código
  1.  
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7.  
  8.    int numero = 0, cont, mayor=0;
  9.  
  10.    for(int i= 1; i <= 1000; i++ ){
  11.         cont=0;
  12.        for(int j= 1; j <= i; j++ ){
  13.  
  14.            if(i % j == 0)
  15.                cont++;
  16.  
  17.        }//
  18.  
  19.         if(numero < cont){
  20.             numero = cont;
  21.             mayor = i;
  22.  
  23.         }//for
  24.  
  25.         /* OJO SI QUIERES SABER LOS DIVISORES DE TODOS LOS NUMEROS HASTA EL MIL
  26.          
  27.          cout << "Numero: " << i  <<" con un total de: "  << cont << " divisores: "<< endl;
  28.          cout << "Los divisores son: ";
  29.          
  30.          for(int k= 1; k <=  i; k++){
  31.              
  32.              if(i % k == 0)
  33.                  cout << k << " ";
  34.          }//for
  35.          
  36.           cout << endl;
  37.          
  38.          */
  39.  
  40.    }//for
  41.  
  42.               cout << endl;
  43.  
  44.         cout << "El numero con mas divisores de 1000  es: " << mayor  <<" con un total de: "
  45.                 << numero << " divisores"<< endl;
  46.         cout << "Los divisores son: ";
  47.  
  48.         for(int k= 1; k <=  mayor; k++){
  49.  
  50.             if(mayor % k == 0)
  51.                 cout << k << " ";
  52.         }//for
  53.  
  54.          cout << endl;
  55.  
  56.    return 0;
  57. }//main
  58.  
  59.  


Título: Re: Problema en ejercicio con funciones
Publicado por: darkeado en 9 Agosto 2015, 23:02 pm
me anda de lujo por que veo como tratar el programa de distinta forma aunque no implementa funciones que era el tema que quería abordar con el problema el resultado es el mismo, gracias amigo