infoarena

infoarena - concursuri, probleme, evaluator, articole => Teme => Subiect creat de: Razvan Atodiresei din Ianuarie 19, 2013, 18:16:02



Titlul: Problema clasa a 9 a C++
Scris de: Razvan Atodiresei din Ianuarie 19, 2013, 18:16:02
Enuntul : Pentru un numar n sa se afiseze ultimii p divizori proprii ai lui ( diferiti de 1 si de el insusi ). Daca numarul n are mai putin de p divizori se vor afisa toti. Exemplu : Pentru n=24 si p=2 se va afisa 8 12.

Cod:
#include <iostream>

using namespace std;

int main()
{
    int n,p,i,x,u,q,d;
    cout<<"n=";
    cin>>n;
    cout<<"p=";
    cin>>p;
    i=2;
    x=0;
    u=n/2;
    q=0;
    d=2;
    while(i<=n/2)
    {
        if(n%i==0)
        {
            x++;
        }
        i++;
    }
    if(p<=x)
    {
        while(q<=p)
        {
            if(n%u==0)
            {
                cout<<u<<" ";
            }
            q=q+1;
            u=u-1;
        }
    }
    if(p>x)
    {
        while(d<=n/2)
        {
            if(n%d==0)
            {
                cout<<" "<<d;
            }
            d++;
        }
    }

}

Daca introduc un numar care are mai putin de p divizori , afiseaza toti divizorii , insa nu imi arata ultimii divizori P , ci doar ultimul divizor .


Titlul: Răspuns: Problema clasa a 9 a C++
Scris de: Flaviu Manica din Februarie 03, 2013, 15:55:45
Programul pare ok,in caz ca un numar are mai putin de p divizori,ii afiseaza pe toti in ordine crescatoare. Nu iti poate afisa p divizori, daca nu are atatia :)


Titlul: Răspuns: Problema clasa a 9 a C++
Scris de: Nita Iulian din Martie 10, 2013, 16:30:38
Pe mine ma doare capul de la ce ai scris.

Fa si tu un

k=0;
for( i= numar/2 ; i>1 && p ; i--)
        if( !(numar%i) ){
               p--;
              sol[++k]=i;} // daca pun cout, afisaza divizorii descrescator

while(k--) cout<<sol[k]<<" ";