Sunteți pe pagina 1din 2

Problema nr.

51
Se numește număr “bine ordonat crescător” un număr natural cu
proprietatea că cifrele sale citite de la stânga la dreapta sunt în ordine
crescătoare. Fiind dat un număr natural citit de la tastatură, să se
stabilească dacă este “bine ordonat crescător” sau nu, afișându-se un mesaj
corespunzător.

Solutia problemei
Verificăm dacă cifrele de la dreapta la stânga sunt descrescatoare, avem o variabila
booleana a pe care o initializam cu 1 ,daca ultimele 2 nu sunt descrescatoare,atunci numarul
nu este bine ordonat crescator.Vom folosi un while să verificam daca ultima cifra a lui x este
mai mică decât penultima.

Soluție în C++
#include <iostream> //biblioteca pentru cin si cout
using namespace std; //folosita pentru a evita std::cout
int main() //headerul functiei principale
{
bool a=1; //variabila booleana
int x; //numarul introdus de la tastatura
cout<<"Introduceti numarul: ";
cin>>x; //se citeste numarul
while(x/10!=0) //verifica daca numarul este nenul
{
if(x%10<x/10%10) //daca ultima cifra a numarului este mai mica decat penultima
a=0; //atunci a este 0
x=x/10; //dispare ultima cifra a lui x
}
if(a==0)
cout<<"Nu este un numar bine ordonat crescator";
else
cout<<"Este un numar bine ordonat crescator";
}

Evaluarea complexitații
Acest algoritm are complexitate logaritmica deoarece avem o conditie IF intr-un ciclu
WHILE.Complexitatea este O(log2n) .

ALTĂ SOLUȚIE:
Descrierea algoritmului:
Vom salva fiecare cifra a numarului într-un vector de int ,dupa verificam intr-un for începând
cu ultima cifra a numarului daca cifrele sunt decrescatoare.

#include <iostream>
using namespace std;
int main()
{
bool a=1;
int x,i=0,v[100];
cout<<"Introduceti numarul: ";
cin>>x;
while(x!=0)
{
i++;
v[i]=x%10;
x=x/10;
}

for(int j=1; j<i; j++)


{
if(v[j]<v[j+1])
{
a=0;
break;
}
}
if(a==0)
cout<<"Nu este un numar bine ordonat crescator ";
else
cout<<"Este un numar bine ordonat crescator ";
}

Evaluarea complexitații
Acesta a doua solutie a problemei are tot complexitate logaritmica, deoarece avem o conditie
if intr-un ciclu for.Complexitatea este O(log2n) .

Barem de corectare cu justificarea punctajului


 Nota 5-9 Elevul a realizat un algoritm care functioneaza dar cu o
complexitate mult mai mare decat soluția arătată mai sus
 Nota 10 Elevul a realizat un algoritm corect cu aceeasi complexitate ca
cele de mai sus

S-ar putea să vă placă și