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

Cerinta sunt destul de sigur ca nu poate fi gasita pe net

Se citeste un numar natural n si apoi n numere, care se retin intr-un vector. (2p)

Se cere:

-sa se afiseze vectorul (1p)

-sa se calculeze si sa se afiseze valoarea maxima din vector si de cate ori apare aceasta valoare (1p)

-sa se afle daca elementele vectorului formeaza o progresie aritmetica; se vor afisa mesaje corespunzatoare „da” sau „nu” (1p)

-sa se elimine din vector elementele neprime care apar in vector, astfel incat sa se retina numai numerele prime; se va afisa din nou vectorul.(2p)

-sa se sorteze descrescator elementele impare din vectorul modificat anterior si sa se afiseze numai elementele impare. (2p)


Nu este obligatoriu sa se foloseasca subprograme.

1p se acorda din oficiu.

Exemplu: daca vectorul initial este (19, 2, 19, 3, 15, 18, 9,19)

maximul este 19 si apare de 3 ori

nu formeaza o progresie aritmetica

dupa eliminarea nr neprime, vectorul va deveni (19, 2, 19, 3, 19)

dupa sortare (19,2,19,19,3) se va afisa 19 19 19 3

Răspunsuri la întrebare

Răspuns de Toni1212
1

Răspuns:

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

bool is_prime(int x) { // functie care verifica daca un numar este prim

if (x < 2) {

return false;

}

for (int i = 2; i * i <= x; i++) {

if (x % i == 0) {

return false;

}

}

return true;

}

int main() {

int n;

vector<int> v;

// citirea datelor de intrare

cin >> n;

for (int i = 0; i < n; i++) {

int x;

cin >> x;

v.push_back(x);

}

// afisarea vectorului

cout << "Vectorul este: ";

for (int x : v) {

cout << x << " ";

}

cout << endl;

// calcularea si afisarea valorii maxime si a numarului de aparitii

int max_val = *max_element(v.begin(), v.end());

int freq = count(v.begin(), v.end(), max_val);

cout << "Maximul este " << max_val << " si apare de " << freq << " ori." << endl;

// verificarea daca vectorul este o progresie aritmetica

bool is_arithmetic_progression = true;

if (v.size() >= 2) {

int d = v[1] - v[0];

for (int i = 2; i < v.size(); i++) {

if (v[i] - v[i - 1] != d) {

is_arithmetic_progression = false;

break;

}

}

}

if (is_arithmetic_progression) {

cout << "Vectorul formeaza o progresie aritmetica." << endl;

} else {

cout << "Vectorul nu formeaza o progresie aritmetica." << endl;

}

// eliminarea elementelor neprime si afisarea vectorului modificat

v.erase(remove_if(v.begin(), v.end(), [](int x) { return !is_prime(x); }), v.end());

cout << "Vectorul cu numere prime este: ";

for (int x : v) {

cout << x << " ";

}

cout << endl;

// sortarea descrescatoare a elementelor impare si afisarea lor

vector<int> odd_numbers;

for (int x : v) {

if (x % 2 != 0) {

odd_numbers.push_back(x);

}

}

sort(odd_numbers.rbegin(), odd_numbers.rend());

cout << "Elementele impare ordonate descrescator sunt: ";

for (int x : odd_numbers) {

cout << x << " ";

}

cout << endl;

return 0;

}

Explicație:

Am folosit clasa vector pentru a stoca elementele citite și pentru a efectua diferite operații pe vector.

Pentru a verifica dacă un număr este prim, am scris o funcție separată is_prime.

Pentru a afișa vectorul, am folosit un for-range loop (for (int x : v)), care este echivalent cu `for (int i = 0; i < v.size();

Alte întrebări interesante