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:
#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();