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

Operații cu mulțimi (1/5): verificare

Pentru a verifica dacă un vector este o mulțime, trebuie să verificăm dacă există sau nu doi termeni egali între ei. Dacă da, atunci vectorul nu este o mulțime.

#include <iostream>

using namespace std;

int main()
{
    unsigned v[101],n,i,j,ok=1;
    cin>>n;
    for(i=1;i<=n;++i)cin>>v[i];
    for(i=1;i<=n-1&&ok==1;++i)
        for(j=i+1;j<=n&&ok==1;++j)
        if(v[i]==v[j])ok=0;
    if(ok==1)cout<<"Vectorul este o multime.";
    else cout<<"Vectorul nu este o multime.";
    return 0;
}

Căutarea binară

Căutarea binară a unui număr într-un vector constă în verificarea egalității dintre acel număr și termenul de la mijlocul vectorului. Pentru ca acest tip de căutare să funcționeze este important ca termenii vectorului să respecte o anumită regulă (să fie ordonați). Dacă are loc egalitate, înseamnă că am găsit numărul. Dacă nu, îl vom căuta fie în partea dreaptă a vectorului, fie în partea stângă (se determină partea prin compararea numărului cu mijlocul). Dacă vectorul are n termeni, atunci numărul maxim de pași efectuați va fi log2(n).

De exemplu, programul următor caută numărul x într-un vector ordonat crescător prin căutarea binară.

(Căutarea binară presupune eliminare de secvențe. Variabila st va reprezenta poziția capătului stâng al secvenței în care căutăm numărul, iar dr va fi poziția capătului drept al acestei secvențe. m=(st+dr)/2 va fi deci poziția termenui din mijloc.)

#include <iostream>

using namespace std;

int main()
{
    unsigned v[101],n,ok=0,x,st=1,dr,m,i;
    cin>>x>>n;
    dr=n;
    for(i=1;i<=n;++i)cin>>v[i];
    while(ok==0&&st<=dr)
    {
        m=(st+dr)/2;
        if(v[m]==x)ok=1;
        else if(v[m]>x)dr=m-1;
        else st=m+1;
    }
    if(ok==0)cout<<"Numarul "<<x<<" nu exista in vector.";
    else cout<<"Numarul "<<x<<" exista in vector.";
    return 0;
}

Se poate spune despre căutarea binară că folosește metoda Divide et Impera.

Căutarea secvențială

Căutarea secvențială a unui număr într-un vector constă în compararea fiecărui termen al vectorului cu acel număr, iar când are loc egalitate înseamnă că am găsit numărul în vector. Dacă vectorul are n termeni, atunci numărul maxim de pași efectuați va fi n.

Programul următor caută un număr x într-un vector prin căutarea secvențială.

#include <iostream>

using namespace std;

int main()
{
    unsigned v[101],n,i,ok=0,x;
    cin>>x>>n;
    for(i=1;i<=n&&ok==0;++i)
    {
        cin>>v[i];
        if(v[i]==x)ok=1;
    }
    if(ok==0)cout<<"Numarul "<<x<<" nu exista in vector.";
    else cout<<"Numarul "<<x<<" exista in vector.";
    return 0;
}

Verificare – numere prime între ele

Pentru a verifica dacă 2 numere sunt prime între ele, trebuie să vedem dacă cel mai mare divizor comun al lor este 1. Dacă da, atunci ele sunt prime între ele.

C++

#include 

using namespace std;

int main()
{
    unsigned x,y,r;
    cin>>x>>y;
    r=x%y;
    while(x*y!=0)
    {
        x=y;
        y=r;
        r=x%y;
    }
    if(y==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";
}