Jump to content
Courage

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Vrei sa spui numar perfect, nu patrat. TI-a zis God ce ai gresit.


fWy1P.gif

 

Share this post


Link to post
Share on other sites

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();
         }

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...