Descompunerea în factori primi

#include <iostream>

using namespace std;

int main()
{
    unsigned n,f=2,p;
    cin>>n;
    while(n!=1)
    {
        p=0;
        while(n%f==0)
        {
            n/=f;
            ++p;
        }
        if(p>0)cout<<f<<" "<<p<<endl;
        ++f;
    }
    return 0;
}

Verificare pătrat perfect

#include <iostream>
using namespace std;

int main()
{
    unsigned n,ok=1,f=2,p;
    cin>>n;
    while(n!=1&&ok==1)
    {
        p=0;
        while(n%f==0)
        {
            n=n/f;
            ++p;
        }
        if(p%2!=0)ok=0;
        ++f;
    }
    if(ok==1)cout<<"da";
    else cout<<"nu";
    return 0;
}

Verificări (cifre egale, ordine crescătoare şi descrescătoare, munte şi vale, ∃ şi ∀)

Verificările se realizează cu ajutorul unei variabile egale cu 0 în cazul negaţiei sau 1 în caz contrar.

1.Cifre egale

Pentru a verifica dacă un număr are toate cifrele egale, vom folosi o variabilă egală cu ultima cifră a numărului, apoi vom compara fiecare cifră rămasă cu aceasta. Presupunem că toate sunt egale cu ajutorul unei variabile egale cu 1, iar dacă se găseşte o cifră care nu este egală cu ultima cifră, acea variabilă va deveni 0.

Algoritmul în C++

#include

using namespace std;

int main()
{
unsigned n,c,ok=1;
cin>>n;
c=n%10;n=n/10;
while(n!=0)
{
if(n%10!=c)ok=0;
n=n/10;
}
if(ok==1)cout<<"DA";
else cout<<"NU";
}

2.Ordine crescătoare şi descrescătoare

Există 2 cazuri:

-verificaţi dacă cifrele unui număr se află în ordine crescătoare de la stânga la dreapta/descrescător de la dreapta la stânga.

În acest caz, va trebui de fapt să verificăm dacă  cifra aflată la stânga de o cifră este mai mică decât aceasta.

Algoritmul în C++

#includ

using namespace std;

int main()
{
unsigned n,ok=1;
cin>>n;
while(n>9)
{
if(n/10%10>=n%10)ok=0;
n=n/10;
}
if(ok==1)cout<<"DA";
else cout<<"NU";
}

-verificaţi dacă cifrele unui număr se află descrescător de la stânga la dreapta/crescător de la dreapta la stânga

În acest caz singura diferenţă este că semnul “>=” din while devine “<="

if(n/10%10<=n%10)ok=0;

3.Munte şi vale

Faptul că un număr are aspect de munte înseamnă că acesta are cifrele de la stânga la dreapta crescătoare până la o anumită cifră, după care acestea sunt descrescătoare. De exemplu, 459421 are aspect de munte.

Algoritmul în C++

#include

using namespace std;

int main()
{
unsigned n,n1,ok=1;
cin>>n;
n1=n;
while(n>9&&n%10<n/10%10)n=n/10;
if(n==n1||n19&&n%10>n/10%10)n=n/10;
if(n>9)ok=0;
}
if(ok==1)cout<<"DA";
else cout<<"NU";
}

Faptul că un număr are aspect de vale înseamnă că acesta are cifrele de la stânga la dreapta descrescătoare până la o anumită cifră, după care acestea sunt crescătoare. De exemplu, 96478 are aspect vale.

Algoritmul în C++

#include

using namespace std;

int main()
{
unsigned n,n1,ok=1;
cin>>n;
n1=n;
while(n>9&&n%10>n/10%10)n=n/10;
if(n==n1||n19&&n%109)ok=0;
}
if(ok==1)cout<<"DA";
else cout<<"NU";
}

4.∃ şi ∀

-∃

Verificaţi dacă toate cifrele lui x sunt prime.

Algoritmul în C++

#include

using namespace std;

int main()
{
unsigned x,c,ok=1;
cin>>x;
while(x!=0)
{
c=x%10;x=x/10;
if(c!=2&&c!=3&&c!=5&&c!=7)ok=0;
}
if(ok==1)cout<<"DA";
else cout<<"NU";
}

-∀

Verificaţi dacă numărul x conţine cifre pare.

Algoritmul în C++

#include

using namespace std;

int main()
{
unsigned x,c,ok=0;
cin>>x;
while(x!=0)
{
c=x%10;x=x/10;
if(c%2==0)ok=1;
}
if(ok==1)cout<<"DA";
else cout<<"NU";
}

Rangul unei cifre

Rangul unei cifre reprezintă poziţia sa în număr, de la dreapta la stânga. Luăm de exemplu numărul 18379. Rangul cifrei 9 este 1. Rangul cifrei 7 este 2. Rangul cifrei 3 este 3. Rangul cifrei 8 este 4. Rangul cifrei 1 este 5.

Exemplu: Fie n un număr al cărui minim se repetă o singură dată. Aflaţi rangul minimului.

Algoritmul în C++

#include

using namespace std;

int main()
{
unsigned n,min=10,k=0,n1;
cin>>n;
n1=n;
while(n!=0)
{
if(n%10<min)min=n%10;
n=n/10;
}
while(n1%10!=min)
{
k++;
n1=n1/10;
}
if(k==0)k=1;
else k++;
cout<<k;
return 0;
}

Oglindit. Palindrom. Eliminare de cifre în 2 paşi.

1.Oglinditul unui număr este un număr care conţine toate cifrele acelui număr în aceeaşi ordine, însă de la dreapta la stânga. De exemplu, oglinditul lui 178 este 871. El se obţine astfel:

Algoritmul în C++

#include

using namespace std;

int main()
{
unsigned x,ogl=0;
cin>>x;
while(x!=0)
{
ogl=ogl*10+x%10;
x=x/10;
}
cout<<ogl;
return 0;
}

2.Un palindrom este un număr egal cu oglinditul său. De exemplu, numărul 54345 are oglinditul 54345, cu care este egal, deci este un palindrom. Pentru a verifica dacă un număr este palindrom se va afla oglinditul, după care se va compara cu numărul iniţial.

Algoritmul în C++

#include

using namespace std;

int main()
{
unsigned x,ogl=0,x1;
cin>>x;
x1=x;
while(x1!=0)
{
ogl=ogl*10+x1%10;
x1=x1/10;
}
if(x==ogl)cout<<"Numarul este un palindrom";
else cout<<"Numarul nu este un palindrom";
return 0;
}

3.Eliminarea de cifre se va realiza în 2 paşi cu ajutorul oglinditului. Astfel, când aflăm oglinditul, vom avea condiţia ca cifra să nu aibă o anumită proprietate pentru a nu fi eliminată. Apoi, vom oglindi oglinditul, pentru a obţine numărul cu cifrele în ordinea corectă.

Exemplu: Eliminaţi cifrele pare dintr-un număr n.

Algoritmul în C++

#include

using namespace std;

int main()
{
unsigned x,ogl=0,ogl1=0;
cin>>x;
while(x!=0)
{
if((x%10)%2!=0)ogl=ogl*10+x%10;
x=x/10;
}
while(ogl!=0)
{
ogl1=ogl1*10+ogl%10;
ogl=ogl/10;
}
cout<<ogl1;
return 0;
}

Suma şi produsul cifrelor unui număr. Numărări.

1.Pentru a afla suma cifrelor unui număr, vom folosi o variabilă iniţializată cu 0 la care vom adăuga fiecare cifră.

Algoritmul în C++

#include

using namespace std;

int main()
{
    unsigned x,c,s=0;
    cin>>x;
    while(x!=0)
    {
        c=x%10;x=x/10;
        s=s+c;
    }
    cout<<s;
    return 0;
}

2.Pentru a afla produsul cifrelor unui număr, vom folosi o variabilă iniţializată cu 1 pe care o vom înmulţi cu fiecare cifră.

Algoritmul în C++

#include

using namespace std;

int main()
{
    unsigned x,c,p=1;
    cin>>x;
    while(x!=0)
    {
        c=x%10;x=x/10;
        p=p*c;
    }
    cout<<p;
    return 0;
}

 

3.Pentru a număra cifrele unui număr vom folosi o variabilă iniţializată cu 0 la care vom adăuga 1 pentru fiecare cifră a numărului.

Algoritmul în C++

#include

using namespace std;

int main()
{
    unsigned x,k=0;
    cin>>x;
    while(x!=0)
    {
        x=x/10;
        k++;
    }
    cout<<k;
    return 0;
}

Model de problemă cu meniuri

Scrieţi un algoritm care să convertească în euro o sumă în lei româneşti dacă se apasă tasta 1, în lire sterline dacă se apasă tasta 2 şi în franci elveţieni dacă se apasă tasta 3. Altfel, să se afişeze suma iniţială (1RON=4.5EUR=5GBP=4CHF).

start

scrie “Bine aţi venit la cursul BNR. Doriţi ca suma dumneavoastră să fie convertită în EUR (1), în GBP (2) sau în CHF (3)”

citeşte x,suma

dacă x==1 atunci eur←suma*4.5

scrie eur

altfel dacă x==2 atunci gbp←suma*5

scrie gbp

altfel dacă x==3 atunci chf←suma*4

scrie chf

altfel scrie suma

stop

Algoritmul de interschimbare (regula paharului)

Într-un algoritm, valorile numerelor citite pot fi interschimbate în 3 metode

1. Cu ajutorul unei variabile

(exemplu) Scrieţi un algoritm citeşte două numere a şi b şi le interschimbă valorile, afişându-le pe ecran.

start

citeşte a,b

x←a

a←b

b←x

scrie a,b

stop

În acest caz am realizat permutarea circular spre stânga. Acest lucru se poate face şi spre dreapta.

start

citeşte a,b

x←b

b←a

a←x

scrie a,b

stop

2. Cu ajutorul adunării şi al scăderii

start

citeşte a,b

a←a+b

b←a-b

a←a-b

scrie a,b

stop

3. Cu ajutorul înmulţirii şi al împărţirii

start

citeşte a,b

a←a*b

b←a/b

a←a/b

scrie a,b

stop