Jump to content

Problema C++ Numere Perfecte Mai Mici Decat O Valoare Data


Recommended Posts

  • Moderators
Posted

Un numar este patrat perfect daca este egal cu suma divizorilor sai(exclusiv el).
Exemplu: 6=1+2+3. Afisati toate numerele perfecte mai mici decat o valoare data.

 

În code::blocks nu-mi afişează nimic :(. (nu înţeleg ce nu am făcut bine)

 



#include <iostream>
using namespace std;
int main()
{
    unsigned n,d,i,s;
    cout<<"n= ";
    cin>>n;
    s=0;
    for (i=1;i<=n;i++)
    {
        for (d=1;d<=i/2;d++)
        {
            if (i%d==0)
            {
                s=s+d;
            }
            if (i==s)
            {
                cout<<i;
            }
        }
    }
    return 0;
}

 

 

Pentru a depista dacă un număr este perfect se foloseşte algoritmul următor:

 

#include <iostream>
using namespace std;
int main()
{
    unsigned n,s=0,d;
    cout<<"n= ";
    cin>>n;
    for (d=1;d<=n/2;d++)
    {
        if (n%d==0)
        {
            s=s+d;
        }
    }
    if (n==s)
    {
        cout<<"numarul este perfect";
    }
    else
    {
        cout<<"numarul nu este perfect";
    }
    return 0;
}

Posted

ia gandestete..ce se intampla cu variabila "s" pe parcursul programului? mai exact cand treci la alt numar, sa vezi daca e cum cauti tu.. (s nu ar trebui sa fie initializat cu o noua valoare?)

 

app, mai gandestete la parantezele de la al 2lea for.

love is a verb
Love is a doing word

  • 11 months later...
Posted

Salut, codul meu pentru gasirea numerelor perfecte pana la o valoare data n, este urmatorul. Dar am o problema, ii dau sa imi gaseasca toate numerele perfecte pana la 30. Pana la 30 sunt doar 2 numere perfecte: 6 si 28. Problema codului meu este ca il gaseste si pe 24 ca fiind numar perfect. In mod normal nu ar trebui sa il ia deoarece suma divizorilor este: 1+2+3+4+6+8+12 dar algoritmul meu imi verifica suma imediat cum imi aduna urmatorul divizor de aceea el nu mai apuca sa adune si termenul 12 la suma,. Prin urmare cand ajunge la 24 si ii calculeaza suma ajunge la penultimul pas cand S=1+2+3+4+6+8=24 il verifica si vede ca se potriveste.

 

#include<stdio.h>
#include<conio.h>
#include<math.h>
 
int main ()
    {
         int n, i, j,m,S=0;
         
         printf("n=");
         scanf("%d",&n);
         
         for(i=1;i<=n;i++)
         {
           
             S=0;
    
                             
             for(j=1;j<i/2;j++)
             {
                if(i%j==0)
                      {
                       S=S+j;
                       if(i==S)
                       printf("Nr.Perfect=%dn",S);
                         }
                       }
                       
                       }
                       
         getch();
         }
Posted

Cel de-al 2-lea for (cel cu j) pune-l sa mearga pana la <=i/2. La tine nu va merge la 12 in cazul numarului 24.(24/2=12 iar la tine e <i/2 deci merge pana la 11).

Mai scoate si acea verificare( if(i==S) ) din if-ul cu calcularea sumei. In cel de-al dolea for calculezi suma si dupa verifici daca suma este egala cu i.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.