Informatică, întrebare adresată de ciprian74, 8 ani în urmă

Cerinţa
Se citește un vector cu n elemente, numere naturale distincte. Să se afișeze elementele cuprinse între elementul cu valoarea minimă și cel cu valoare maximă din vector, inclusiv acestea.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele vectorului.

Date de ieşire
Programul afișează pe ecran elementele cerute, separate prin exact un spațiu.

Restricţii şi precizări
1 ≤ n ≤ 1000
elementele vectorului vor fi mai mici decât 100.000



Exemplu
Intrare

5
7 9 6 2 8
Ieșire

9 6 2
Salut! Va rog mult sa ma ajutati si pe mine la aceasta problema. Am incercat sa o fac dar nu reusesc sa o fac de 100 de puncte. Este vorba de problema #490 de pe pbinfo. As dorii si explicatii la fiecare linie de cod.

Răspunsuri la întrebare

Răspuns de Apollyon
1

Răspuns:

#include <iostream>

int* creareVector(const size_t& dimensiuneVector);

void afisareVector(const std::pair<size_t, size_t>& perecheIndexi, int vectorNumere[]);

std::pair<size_t, size_t> calculareIndexi(int vectorNumere[], const size_t& dimensiuneVector);

int main()

{

size_t dimensiuneVector;

std::cout << "Introdu dimensiunea vectorului >> ";

std::cin >> dimensiuneVector; // citim dimensiunea vectorului

if (!dimensiuneVector > 0) {

 exit(EXIT_FAILURE);

}

int* vectorNumere = creareVector(dimensiuneVector); // creăm vectorul cu dimensiunea dată

// gasim indexii minimului si maximului din vector

std::pair<size_t, size_t> perecheIndexi{ calculareIndexi(vectorNumere, dimensiuneVector) };

// afișăm valorile dintre cei doi indexi

afisareVector(perecheIndexi, vectorNumere);

delete[] vectorNumere; // la final eliberăm memoria alocată mai sus

return 0;

}

int* creareVector(const size_t& dimensiuneVector)

{

int* vectorNumere = new int[dimensiuneVector];

// după ce am alocat memoria citim numerele

for (size_t i{}; i < dimensiuneVector; ++i) {

 std::cout << "vectorNumere[" << i << "] = ";

 std::cin >> vectorNumere[i];

}

return vectorNumere;

}

void afisareVector(const std::pair<size_t, size_t>& perecheIndexi, int vectorNumere[])

{

for (size_t i{ perecheIndexi.first }; i <= perecheIndexi.second; ++i) {

 std::cout << vectorNumere[i] << (i != perecheIndexi.second ? " " : "");

}

}

std::pair<size_t, size_t> calculareIndexi(int vectorNumere[], const size_t& dimensiuneVector) {

int valMaxima{ INT_MIN }, valMinima{ INT_MAX };

size_t minIndex{}, maxIndex{};

// parcurgem vectorul

for (size_t i{}; i < dimensiuneVector; ++i) {

 // dacă numărul curent este mai mic decât valoarea minimă

 if (vectorNumere[i] < valMinima) {

  valMinima = vectorNumere[i]; // actualizăm valoarea minimă

  minIndex = i; // și-i salvăm index-ul

 }

 // la fel și aici, dacă numărul curent e mai mare decât valoarea maximă facem aceași chestie

 if (vectorNumere[i] > valMaxima) {

  valMaxima = vectorNumere[i];

  maxIndex = i;

 }

}

// la final avem grijă ca pe prima poziție să fie index-ul cel mai mic (pentru a putea afișa cum trebuie-n for)

// am folosit std::pair pentru a returna cei doi indexi deodată într-o pereche (altfel trebuiau 2 funcții separate / pasați prin referință)

return minIndex < maxIndex ? std::make_pair(minIndex, maxIndex) : std::make_pair(maxIndex, minIndex);

}

Alte întrebări interesante