Sunteți pe pagina 1din 12

Introducere in C+

+
Lectia 6 -incepatori
Subsecventa maximala de numere egale
Se dă o secvența de n numere. Să se spună care este numărul maxim de numere identice consecutive în
secvență. Exemple:
10
6225888225
3
Numărul 8 apare de trei ori la rînd. Nici un alt număr nu apare de mai multe ori la rînd.
14
88333311155552
4
Numărul 3 apare de patru ori la rînd. De asemenea și numărul 5 apare de patru ori la rînd. Nici un alt număr nu
apare de mai multe ori la rînd.
Cum putem face?

Ne putem uita la numărul anterior din secvența pentru a verifica dacă este egal cu cel actual. Dacă este, ne mărim
contorul, dacă nu, verificam dacă contorul nostru este maxim și după îl punem pe 0.
Solutie
#include <iostream>

using namespace std;

int main()
{
int l, a, b, lmax, n, i;
l = lmax = 1;
cin >> n >> a;
for( i = 1; i < n; i++) {
cin >> b;
if( a == b )
l++;
else {
if( l > lmax )
lmax = l;
l = 1;
}
a = b;
}
cout << lmax;
return 0;
}
Vectori

Definiție: vectorul este o colecție de valori de același tip (întreg, caracter, sau alte tipuri), valori ce pot fi accesate după un
indice, sau poziție, care se mai cheamă și indicele în vector al acelei valori.
Exemplu:

Exemplu de vector cu n elemente
În acest exemplu avem un vector v care conține n valori de tip întreg. Cele n valori pot fi accesate folosind indicele lor, sau
poziția lor, de la 0 la n-1, înscrisă în desen sub fiecare din căsuțe. Elementul de pe poziția 2 este accesat ca v[2]. Așa cum la
matematică scriem
v = v0, v1, v2, ..., vn-2, vn-1
în limbajul C++ scriem
v[0], v[1], v[2], ..., v[n-2], v[n-1]
În cazul nostru v[0] are valoarea 9, v[1] are valoarea 5, v[2] are valoarea 12, și așa mai departe.
Observație importantă: pozițiile, sau indicii elementelor încep de la zero, nu de la unu. Astfel, dacă avem un vector
de 10 elemente, ele vor fi numerotate de la 0 la 9. Elementul v[10] nu există, deorece ar fi al 11-lea element.
Vectori
Declararea vectorilor
Ca orice variabilă C, vectorii trebuie declarați. Vectorul din exemplul de mai sus se declară astfel:
int v[100];
Numărul dintre parantezele pătrate reprezintă numărul de elemente (valori) al vectorului, iar int reprezintă tipul fiecărei valori.
Să nu uităm că toate valorile unui vector trebuie să aibă același tip. Nu se poate ca v[1] să fie de tip int, iar v[2] de tip char. Nu
uitați că ultimul element din acest vector este v[99], deoarece v[100] ar fi in afara vectorului.
În ce secțiune a programului C declarăm vectorii? În mod normal vectorii se declară împreună cu celelalte variabile la
începutul programului C, imediat după main(). Dar noi vom face o excepție de la regulă și-i vom declara imediat înainte de
main(), astfel:
#include <stdio.h>
int v[100];
int main() {
...
return 0;
}
Vectori de frecventa

Se dau n numere din intervalul [0,9] și vrem sa aflam care dintre cele 10 cifre apare de cele mai multe
ori
Cum putem face?
Vom folosi un vector de frecventa de 10 elemente:
Daca citesc cifra c, voi fac f[c]++
Astfel, la final f[i] va conține numărul de aoparitii ale cifrei i
Deci, mai avem doar de aflat maximul dinte cele 10 valori ale lui f
Probleme
Ușuoare
https://www.pbinfo.ro/probleme/1452/sterg
ere-element
https://www.pbinfo.ro/probleme/546/afisare
0
https://www.pbinfo.ro/probleme/158/inserare
Medii
https://www.pbinfo.ro/probleme/516/sumsec1

Grele
https://www.pbinfo.ro/probleme/1453/stergere1
CMMDC
Exemplu:
Fie n=32 și m=24.
m != 0:
Calculăm r = n % m = 8
n devine m, iar m devine r.
Acum n=24 și m=8.
m != 0:
Calculăm r = n % m = 0
n devine m, iar m devine r.
Acum n=8 și m=0.
m este 0. Valoarea actuală a lui n = 8 este cel mai mare divizor comun al valorilor inițiale, 32 și 24.
CMMDC
CMMMC. Algoritmul lui Euclid

Fie a și b două numere naturale. De numește cel mai mic multiplu comun (pe scurt cmmmc) al lui a și b cel mai mic număr natural
nenul cu proprietatea că se divide atât cu a cât și cu b.
Cel mai mic multiplu comun al numerelor a și b se notează [a,b][a,b] sau lcm(a,b)lcm(a,b) – least common multiple.

Produsul a două numere naturale nenule este egal cu produsul dintre cel mai mare divizor comun al lor și cel mai mic multiplu comun al lor.
a⋅b=(a,b)⋅[a,b]a⋅b=(a,b)⋅[a,b]
a⋅b=gcd(a,b)⋅lcm(a,b)

Fie a și b valorile date. Vom construi valorile m și n, astfel:


1. inițial n ← a, m ← b;
2. cât timp m ≠ n:
dacă n < m, atunci n crește cu valoarea lui a: n ← n + a
dacă n > m, atunci m crește cu valoarea lui b: m ← m + b
3. valoarea finală, comună, a lui n și m este cel mai mic multiplu comun pentru a și b
Observație: Algoritmul poate fi aplicat similar pentru trei sau mai multe numere!
Probleme
Ușuoare
https://www.pbinfo.ro/probleme/376/suma-divizori
https://www.pbinfo.ro/probleme/387/suma-divizorilor-im
pari
https://www.pbinfo.ro/probleme/388/numarul-divizorilor-pari

Medii
https://www.pbinfo.ro/probleme/389/divizoripariinterval
https://www.pbinfo.ro/probleme/3272/sumdivogl
https://www.pbinfo.ro/probleme/3200/neadragulin

Grele
https://www.pbinfo.ro/probleme/245/nrdivmax

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