Alta problema cu raspuns necesar in C++
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 cate dintre elementele vectorului sunt divizibile cu ultima valoare din vector (1p)
-sa se afle daca elementele vectorului sunt ordonate strict crescator; se vor afisa mesaje corespunzatoare „da” sau „nu” (1p)
-sa se insereze in vector intre oricare elemente vecine valoarea celui mai mare divizor comun al lor, daca acesta este diferit de 1; se va afisa din nou vectorul.(2p)
-sa se sorteze descrescator elementele de pe pozitiile impare din vectorul modificat anterior si sa se afiseze numai elementele de pe pozitiile impare. (2p)
Nu este obligatoriu sa se foloseasca subprograme.
1p se acorda din oficiu.
Exemplu: daca vectorul initial este (19, 19, 3, 15, 18, 9,19)
3 elemente sunt multiplu de 19
nu sunt ordonate strict crescator
dupa inserarea cmmdc, vectorul va deveni (19, 19, 3, 3, 15, 3, 18, 9, 9,19)
dupa sortare, cu indici luati de la 0 vectorul este (19, 19, 3, 19, 15, 9, 18, 3, 9,3) va afisa 19 19 9 3 3
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <algorithm>
using namespace std;
int cmmdc(int a, int b) {
while (b != 0) {
int r = a % b;
a = b;
b = r;
}
return a;
}
int main() {
int n;
cin >> n;
int v[1000];
for (int i = 0; i < n; i++) {
cin >> v[i];
}
for (int i = 0; i < n; i++) {
cout << v[i] << " ";
}
cout << endl;
int nr_divizibile = 0;
for (int i = 0; i < n; i++) {
if (v[i] % v[n-1] == 0) {
nr_divizibile++;
}
}
cout << "Numarul de elemente divizibile cu ultimul element din vector este: " << nr_divizibile << endl;
bool crescator = true;
for (int i = 0; i < n-1; i++) {
if (v[i] >= v[i+1]) {
crescator = false;
break;
}
}
if (crescator) {
cout << "da" << endl;
} else {
cout << "nu" << endl;
}
int vector_nou[2000];
int index = 0;
for (int i = 0; i < n - 1; i++) {
vector_nou[index++] = v[i];
int d = cmmdc(v[i], v[i+1]);
if(v[i] == v[i + 1])
continue;
if (d != 1) {
vector_nou[index++] = d;
}
}
vector_nou[index++] = v[n-1];
cout << "Vectorul nou este: ";
for (int i = 0; i < index; i++) {
cout << vector_nou[i] << " ";
}
cout << endl;
int vector_impare[1000];
int nr_impare = 0;
for (int i = 1; i < index; i += 2) {
vector_impare[nr_impare++] = vector_nou[i];
}
sort(vector_impare, vector_impare+nr_impare, greater<int>());
cout << "Elementele de pe pozitiile impare din vectorul sortat descrescator sunt: ";
for (int i = 0; i < nr_impare; i++) {
cout << vector_impare[i] << " ";
}
cout << endl;
return 0;
}