Sunteți pe pagina 1din 10

Gavrila Cristina Gabriela

Informatica Aplicata – 10LF392

TEMA - ALGORITMICA LABORATOR 1 (NUMERE)

1. Cerinta: Se citeste un numar natural n cu numar par de cifre. Calculati si afisati numarul obtinut din n
inversand cifra unitatilor cu a zecilor, cea a sutelor cu cea a miilor, etc.
Exemplu: n=123456 rezulta 214365.

#include <iostream>
using namespace std;

int verificare_nr_par(int n)
{
int nr_cifre=0;
while (n)
{
n /= 10;
nr_cifre++;
}
if (nr_cifre % 2 == 0)
return 1;
else
return 0;
}

int main()
{
int numar, intermediar=0;
cin >> numar;
if (verificare_nr_par(numar))
{
while (numar)
{
intermediar = intermediar * 100 + numar % 100;
numar /= 100;
}
while (intermediar)
{
numar = numar * 10 + intermediar % 10;
intermediar /= 10;
}
cout << numar;
}
else cout << "Ati introdus un numar care nu respecta conditiile.";
}

1
Gavrila Cristina Gabriela
Informatica Aplicata – 10LF392
2. Cerinta: Se citesc doua numere naturale a si b. Calculati cate numere palindrom sunt din intervalul
[a,b]. Un numar este palindrom daca are aceeasi valoare atat daca e citit de la stanga la dreapta cat si
de la dreapta la stanga (de exemplu 12321).
Exemplu: a=100, b=200 se va afisa: 101,111,121,131,141,151,161,171,181,191

#include <iostream>
using namespace std;

int verificare_interval(int x, int y)


{
if (x < y)
return 1;
else
return 0;

int inversul_curent (int aux)


{
int inv = 0;
while (aux)
{
inv = inv * 10 + aux % 10;
aux = aux / 10;
}
return inv;
}

int palindrom(int inv, int numar_curent)


{
if (inv == numar_curent)
return 1;
else return 0;
}

int main()
{
int a, b, nr_palindrom=0,i;
cin >> a >> b;
if (verificare_interval(a, b))
{
for (i = a; i <= b; i++)
{
nr_palindrom += palindrom(inversul_curent(i), i);
if (palindrom(inversul_curent(i), i))
cout << inversul_curent(i)<<' ';
}
cout <<endl<<nr_palindrom;
}
else cout << "Numerele introduse nu reprezinta un interval";
}

2
Gavrila Cristina Gabriela
Informatica Aplicata – 10LF392
3. Cerinta: Se citesc doua numere naturale a si b (ambele mai mari decat 1). Calculati si afisati cati
termeni din sirul lui Fibonacci se afla in intervalul [a,b].
Exemplu: In intervalul [20,40] sunt 2 termeni (21 si 34)

#include <iostream>
using namespace std;

int verificare_interval(int x, int y)


{
if (x < y)
return 1;
else
return 0;
}

int main()
{
int a, b, t1 = 1, t2 = 1 , tc, nr = 0;
cin >> a >> b;
if (verificare_interval(a, b))
{
while (t1 + t2 <= b)
{
tc = t1 + t2;
if (tc >= a)
{
cout << tc << ' ';
nr++;
}
t1 = t2;
t2 = tc;
}
cout << endl;
cout << "Exista " << nr << " numere Fibonacci in sir";
}
else
cout<< "Numerele introduse nu reprezinta un interval";
}

3
Gavrila Cristina Gabriela
Informatica Aplicata – 10LF392
4. Cerinta: Se citeste un numar natural k din intervalul [1,9]. Afisati toate numerele n formate din exact
k cifre care au proprietatea ca n-1 si n+1 sunt numere prime.
Exemplu: k=2 se vor afisa numerele: 12, 18, 30, 42, 60 si 72

#include <iostream>
using namespace std;

int checkInput(int a)
{
if (a >= 0 && a <= 9)
return 1;
else
return 0;
}

int ordinNumar(int k)
{
int ordin = 1;
for (int i = 1; i < k; i++)
ordin *= 10;
return ordin;
}

int isPrime(int i)
{
int is_prime = 1;
if (i % 2 == 0 && i > 2) is_prime = 0;
else
for (int d = 3; d * d <= i; d += 2)
if (i % d == 0)
is_prime = 0;
return is_prime;
}

void primeConsecutive(int limitaInf, int limitaSup)


{
int numarPrim1 = 0, numarPrim2 = 0;
for (int i = limitaInf; i <= limitaSup; i++)
{
if (isPrime(i))
{
numarPrim1 = numarPrim2;
numarPrim2 = i;
if (numarPrim2 - numarPrim1 == 2)
cout << numarPrim2 - 1 << ' ';
}
}
}

int main()
{
int k, limitaInf, limitaSup;
cin >> k;
if (checkInput(k))
{
limitaInf = ordinNumar(k);
limitaSup = limitaInf * 10 - 1;
primeConsecutive(limitaInf,limitaSup);
}
else
cout << "Valoarea introdusa nu este o cifra";
}

4
Gavrila Cristina Gabriela
Informatica Aplicata – 10LF392
5. Cerinta: Să se determine reprezentarea în baza 2 a unui număr natural n.
Exemplu: n=13 se va afisa: 1101

#include <iostream>
using namespace std;

int convert(int n, int b)


{
int ordin = 1, conversie = 0;
do
{
conversie = conversie + (n % b) * ordin;
ordin *= 10;
n = n/b;
} while (n);
return conversie;
}

int main()
{
int numar, baza;
cout << "Introduceti numarul de reprezentat: "; cin >> numar;
cout << "Introduceti baza in care se va face conversia: "; cin >> baza;
cout << convert(numar, baza);

5
Gavrila Cristina Gabriela
Informatica Aplicata – 10LF392
6. Cerinta: Să se verifice daca cifrele lui n sunt in progresie aritmetica.
Exemplu: n=2596 se va afisa: Cifrele lui 2596 nu sunt in progresie aritmetica.
Exemplu: n=2468 se va afisa: Cifrele lui 2468 sunt in progresie aritmetica.

#include <iostream>
using namespace std;

int isProgression(int n)
{
int ratie;
ratie = n % 10 - (n / 10) % 10;
n /= 10;
while (n>9)
{
if (n % 10 - (n / 10) % 10 != ratie)
return 0;
n/=10;
}
return 1;
}

int main()
{
int numar;
cin >> numar;
if (isProgression(numar))
cout << "Cifrele lui " << numar << " sunt in progresie aritmetica";
else
cout << "Cifrele lui " << numar << " NU sunt in progresie aritmetica";
}

6
Gavrila Cristina Gabriela
Informatica Aplicata – 10LF392
7. Cerinta: Se citeşte un număr n. Să se descompună în factori primi.
Exemplu: n=123 se va afisa: 3;41

#include <iostream>
using namespace std;

void primeFactors(int numar)


{
int factor = 2, exponent;
while (numar > 1)
{
exponent = 0;
while (numar % factor == 0)
{
numar /= factor;
exponent += 1;
}
if (exponent)
cout << factor << "^" << exponent << ' ';
factor += 1;
}
}

int main()
{
int nr;
cin >> nr;
primeFactors(nr);
}

7
Gavrila Cristina Gabriela
Informatica Aplicata – 10LF392
8. Cerinta: Să se afiseze cel mai mic numar care se poate forma cu cifrele lui n, fiecare cifra repetandu-
se de cate ori se repeta si in n.
Exemplu: 1204192 se va afisa: 112249

#include <iostream>
using namespace std;

void intZero(int v[])


{
int cifra;
for (cifra = 0; cifra <= 9; cifra++)
v[cifra] = 0;
}

void splitDigits(int n, int v[])


{
do
{
v[n%10]++;
n /= 10;
} while (n);
}

int minDigit(int n)
{
int minic = 10;
do
{
if (n%10 < minic && n%10 != 0)
minic = n%10;
n /= 10;
} while (n);
return minic;
}

int formMinimNumber(int m, int vc[])


{
int cifra;
for (cifra = 0; cifra <= 9; cifra++)
while (vc[cifra]--)
m = m * 10 + cifra;
return m;
}

int main()
{
int numar, vectorCifre[11], minimNumar=0, minimCifra=10;
cin >> numar;
intZero(vectorCifre);
splitDigits(numar, vectorCifre);
minimNumar=minDigit(numar);
vectorCifre[minimNumar]--;
cout << formMinimNumber(minimNumar, vectorCifre);
}

8
Gavrila Cristina Gabriela
Informatica Aplicata – 10LF392
9. Cerinta: Să se ștearga toate cifrele care sunt precedate de o cifră identică.
Exemplu: 1255544231 se va afisa: 1254231

#include <iostream>
using namespace std;

int removeIdenticalEntries (int n)


{
int newNumber = 0, cifraPrecedata, cifraCurenta = -1, pozitia = 1;
while (n)
{
cifraPrecedata = n % 10;
if (cifraPrecedata != cifraCurenta)
{
newNumber = newNumber + cifraPrecedata*pozitia;
pozitia *= 10;
}
cifraCurenta = cifraPrecedata;
n /= 10;
}
return newNumber;
}

int main()
{
int numar;
cin >> numar;
cout<<removeIdenticalEntries(numar);
}

9
Gavrila Cristina Gabriela
Informatica Aplicata – 10LF392
10. Cerinta: Se citeste un numar natural n, n>1000. Afisati cel mai mare numar care se poate obtine din n
prin eliminarea unei singure cifre.
Exemplu: din 45329 se obtine 5329 (e cel mai mare dintre numerele 4532 4539 4529 4329 5329)

#include <iostream>
using namespace std;

int numberLenght(int n)
{
int nr = 0;
while (n)
{
nr++;
n /= 10;
}
return nr;
}

void splitDigits(int n, int v[], int lenght)


{
int i;
for (i = lenght; i >= 1; i--)
{
v[i] = n % 10;
n /= 10;
}
}

int main()
{
int numar, nrCifre, vectorCifre[20], numarMaxim=0, cifra;
cin >> numar;
nrCifre = numberLenght(numar);
splitDigits(numar, vectorCifre, nrCifre);
for (cifra = 1; cifra < nrCifre; cifra++)
{
//cel mai mare numar se va obtine prin eliminarea primei
//cifre de la stanga la dreapta care este strict mai mic decat
//urmatoarea
if (vectorCifre[cifra] < vectorCifre[cifra + 1])
{
numarMaxim = numarMaxim * 10 + vectorCifre[cifra + 1];
cifra++;
break;
}
else
numarMaxim = numarMaxim * 10 + vectorCifre[cifra];
}
for(int i=cifra+1; i<=nrCifre;i++)
numarMaxim = numarMaxim * 10 + vectorCifre[i];
cout << numarMaxim;
}

10

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