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

Mediana unui șir de valori în C++

Dându-se n valori naturale, să se afle mediana acestora — valoarea aflată la mijlocului șirului. Vom considera că elementele sunt indexate de la 1.

  • Pentru n impar (n % 2 == 1), mediana este a n / 2 + 1-a valoare din șir (dacă elementele ar fi crescătoare);
  • Pentru n par (n % 2 == 0), mediana este n / 2-a valoare din șir (dacă elementele ar fi crescătoare).

Exemplu: Pentru n = 5 și a = [5, 2, 4, 1, 3], mediana este 3: șirul a ordonat crescător este [1, 2, 3, 4, 5], iar elementul de pe poziția n / 2 + 1 = 5 / 2 + 1 = 2 + 1 = 3 este 3.

Explicarea algoritmului

Vom ordona șirul a crescător. Pentru asta, putem ori să folosim funcția sort() din biblioteca <algorithm>, ori să sortăm folosind un algoritm de sortare cunoscut.

De aici, verificăm paritatea lui n. Dacă este impar, afișăm a[n / 2 + 1], altfel, afișăm a[n / 2]. Atenție: considerăm că șirul a are elementele indexate de la 1.

Rezolvare în C++

#include <iostream>

using namespace std;

int main()
{
    //Declarare și citire
    int n, a[1001];
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    //Sortare crescătoare
    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;
            }
        }
    }

    //Afișarea medianei
    int mediana;
    if(n % 2 == 1) {
        mediana = a[n / 2 + 1];
    } else {
        mediana = a[n / 2];
    }
    cout << "Mediana șirului a este " << mediana;
    return 0;
}

Obține medalia mult dorită. Devino As la olimpiadă.

Curs complet de olimpiadă, pregătit de olimpici de la Oxford și TU Delft.

Cuprinsul lecției

Se încarcă…

Citește și

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