Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

Cel mai frecvent element dintr-un șir în C++

Dându-se un șir de numere naturale a[] de lungime n, să se determine numărul care apare de cele mai multe ori în șir (în caz de egalitate, considerăm numărul mai mic).

Considerăm că atât n, cât și elementele șirului sunt mai mici decât 1000.

Exemplu. Pentru șirul a = (1, 10, 1, 1, 9, 7, 4, 10), răspunsul este 1, deoarece apare de cele mai multe ori.

Metoda 1: Vector de frecvență

O metodă ar fi să ne folosim de un vector de frecvență. Vom crea un vector, fr, inițial gol, în care fr[i] reprezintă numărul de apariții ale lui i în șirul a. Spre exemplu, în exemplul de mai sus, fr[1] = 3, iar fr[10] = 2.

Pentru a forma acest vector, parcurgem elementele șirului și le marcăm în fr, pe rând.

La final, parcurgem toate elementele posibile din fr, verificând care apare de cele mai multe ori.

Implementare C++

#include <iostream>

using namespace std;

int main()
{
    //Declarăm și citim șirul nostru
    int n, a[1001];
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    //Declarăm și calculăm vectorul de frecvență
    int fr[1001];
    for(int i = 1; i <= 1000; i++) { //Vectorul trebuie golit la început
        fr[i] = 0;
    }
    for(int i = 1; i <= n; i++) {
        fr[a[i]]++; //Valoarea elementului curent este a[i]. Așadar, creștem frecvența acesteia
    }
    int valMax = 1;
    for(int i = 1; i <= 1000; i++) {
        if(fr[valMax] < fr[i]) { //Frecvența numărului cu număr maxim de apariții nu este maximul => îl schimbăm
            valMax = i;
        }
    }

    //Afișăm răspunsul
    cout << "Numărul " << valMax << " apare de " << fr[valMax] << " ori (maxim posibil)";
    return 0;
}

Metoda 2: Sortare

Sortăm vectorul nostru. Din vectorul sortat, elementele egale sunt consecutive, așadar trebuie să determinăm cea mai lungă secvență de elemente consecutive.

Pentru sortare, vom folosi Bubble sort, un algoritm clasic de sortare.

Implementare C++

#include <iostream>

using namespace std;

int main()
{
    //Declarăm și citim șirul nostru
    int n, a[1001];
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    //Sortăm șirul a
    for(int i = 1; i < n; i++) {
        for(int j = i + 1; j <= n; j++) {
            if(a[i] > a[j]) {
                int aux = a[i];
                a[i] = a[j];
                a[j] = aux;
            }
        }
    }

    //Determinăm secvența cu număr maxim de elemente egale
    int valMax = 0, valMaxFr = 0; //Valoarea maximă și frecvența ei
    int valCrt = 0, valCrtFr = 0; //Valoarea curentă și frecvența ei
    for(int i = 1; i <= n; i++) {
        if(a[i] == a[i - 1]) {
            valCrtFr++;
        } else {
            if(valCrtFr > valMaxFr) { //Am găsit un nou maxim, actualizăm variabilele
                valMax = valCrt;
                valMaxFr = valCrtFr;
            }
            //Formăm o nouă secvență: are lungimea 1 și valoarea a[i]
            valCrt = a[i];
            valCrtFr = 1;
        }
    }

    //Afișăm răspunsul
    cout << "Numărul " << valMax << " apare de " << valMaxFr << " ori (maxim posibil)";
    return 0;
}

Cuprinsul lecției

Se încarcă…

Citește și

Do while vs while în C++ - Care e diferența?Complexitatea unui algoritm (timp și spațiu) în C++Verifică dacă un număr dat este o putere de 2 în C++Divide et Impera (metodă de programare C++)Numărul de divizori al unui număr în C++Recursivitate în C++Codul ASCII (tabel complet)Verifică dacă un număr este par sau impar fără modulo în C++Copiuțe: Cifrele unui numărFactorialul unui număr în C++Cea mai lungă secvență de elemente crescătoare în C++Vectorii în C++: declarare și parcurgereMaximul și minimul a două valori în C++Ciurul lui Eratostene în C++Comentarii în C++Al N-lea termen dintr-o progresie aritmeticăAl N-lea termen dintr-o progresie geometricăNumărul de divizori primi ai unui număr în C++Cel mai mare divizor comun (CMMDC) a două numere în C++Numere triunghiulare. Verificarea unui număr triunghiularVerifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Instrucțiunea continue (structuri repetitive)Indicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Află secolul unui an citit de la tastatură în C++Cifrele unui număr. Prelucrarea cifrelor unui număr în C++Cifra maximă a unui număr recursiv în C++Verificare număr prim în C++ (Clasa a IX-a)Transformarea unei litere mici în literă mare în C++Maximul și minimul a trei valori în C++Căutare binară în C++Vectori de frecvență (de apariții) în C++Transformarea unui număr din baza 2 în baza 10 în C++Funcții predefinite în C++ (matematice, șiruri de caractere)Valoarea absolută (modulul) unui număr în C++Indicatorul lui Euler în C++Transformarea unui număr din baza 10 în baza 2 în C++Suma divizorilor unui număr în C++Ce înseamnă endl în C++?Ce înseamnă variabilă globală și locală în C++?Numărul de cifre ale factorialului unui numărMediana unui șir de valori în C++Numărul combinărilor în C++ (formula combinărilor)Ce este o funcție void în C++?CMMMC a două numere în C++ (cel mai mic multiplu comun)Aplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorNumărul de apariții al unui număr într-un vector în C++Suma elementelor unui vector recursiv în C++Cum să citești și să afișezi în fișiere în C++Citește un șir de caractere cu spații în C++Verificare dacă un număr este palindrom în C++Numărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Matrice pătratice în C++. Diagonala principală și secundarăAl N-lea termen Fibonacci în C++CMMDC recursiv a două numere naturale în C++Numărul aranjamentelor în C++ (formula aranjamentelor)Cel mai semnificativ bit în C++Verifică dacă un caracter este cifră în C++Suma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Matrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicCe este o variabilă unsigned în C++?Citirea și afișarea matricelor în C++Calculul combinărilor de n luate câte k (nCk) în C++Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortCum să afișezi partea întreagă a unui număr real în C++Cel mai mic număr cu suma cifrelor N în C++Oglinditul unui număr în C++Aria unui triunghi folosind coordonatele acestora în C++Suma 1 + 2 + 3 + ... + N în C++Instrucțiunea break (structuri repetitive)Instrucțiunea while (structuri repetitive)Verifică dacă o literă este mică sau mare în C++Cum să calculezi instant 2 la puterea N în C++Aria și circumferința unui cerc în C++Inversarea unui șir de caractere în C++Distanța dintre două puncte în C++Numărul minim de peroane pentru o gară în C++Tutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Șiruri de caractere în C++. Tot ce trebuie să știiVerifică dacă un caracter este literă în C++Verificare dacă șir de caractere este palindrom în C++Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleCifra de control a unui numărBordarea unei matrice în C++Maximul și minimul a n valori în C++Materia pentru olimpiada de informatică - tot ce trebuie să știiCel mai frecvent element dintr-un șir în C++Combinatorică în C++: permutări, aranjamente, combinări și alteleAlgoritm recursiv pentru căutare binară (clasa a X-a)Tipuri de date în C++: numere întregi, reale, caractere și alteleAfișarea divizorilor primi ai unui număr în C++Interclasarea a doi vectori în C++Suma numerelor naturale dintr-un interval dat în C++Verifică dacă trei puncte sunt coliniare C++Numărul permutărilor în C++ (formula permutărilor)Șirul lui Fibonacci în C++Cel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Operații cu numere mari în C++ - Toate funcțiile explicateTipul struct în C++. Ce sunt structurile de date neomogeneAfișarea elementelor unui vector recursiv în C++Instrucțiunea de decizie în C++: if, else, switch, caseRidicarea la putere în timp logaritmic în C++. Exponențiere rapidăDe ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Rădăcina cubică a unui număr în C++ (cube root)Funcții în C++. Ce sunt subprogramelePointer în C++. Variabile de tipul char * (char steluță)Aflarea sumei primelor N sume GaussCifra maximă și minimă a unui număr în C++Instrucțiunea for (structuri repetitive)Prima cifră a unui număr în C++Câte numere naturale sunt într-un interval dat? (C++)Verificarea unui an bisect în C++Transformarea unei litere mari în literă mică în C++Interschimbarea a două variabile în C++ (3 metode)Verifică dacă o literă este vocală în C++Cel mai puțin semnificativ bit în C++Instrucțiunea do while (structuri repetitive)Maximul și minimul unui vector în C++Oglinditul recursiv al unui număr în C++Radicalul unui număr în C++ (rădăcina pătrată)Generarea șirului Fibonacci generalizat în C++Vectorii în C++: citire și afișareStructuri repetitive (while, do while, for, etc)Inversarea unui vector în C++Verifică dacă un număr aparține șirului Fibonacci în C++

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont