Cerința
Să se scrie funcția cu următorul antet:
void Insert(int a[], int&n)
Funcția primește ca parametri un vector a de numere naturale și n – numărul elementelor vectorului. Să se insereze după fiecare număr impar dublul său.
Restricții și precizări
după inserarea de elemente, este garantat că n va avea lungimea cel mult 800.000
inițial vectorul are cel puțin un element
0 ≤ a[i] ≤ 1.000.000, pentru orice i=0,n-1.
vectorul este indexat de la 0 la n-1
este garantat că vectorul a va putea memora în final toate elementele inițiale și cele inserate
Exemplu
Dacă n = 5 și a = (22,5,7,8,11), atunci Insert(a, n) trebuie să obțină n = 8 și a = (22,5,10,7,14,8,11,22)
Important
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.
Nu inteleg de ce imi da doar 60 de puncte.
Anexe:
boiustef:
de ubde e problema?
Răspunsuri la întrebare
Răspuns de
7
Răspuns:
void Insert(int a[], int &n)
{
int i,k=0;
for (i=0; i<n; ++i)
if (a[i]%2) ++k;;
int j=n+k-1;
for (i=n-1; i>=0; --i)
{
if (a[i]%2) a[j--]=2*a[i];
a[j--]=a[i];
}
n=n+k;
}
Explicație:
Se parcurge mai întâi vectorul pentru a se determina k = numărul numerelor impare. De aici se obține faptul că la final lungimea vectorului va fi n+k. Se parcurge apoi vectorul a de la poziția n-1 către 0 și se depun valorile inițiale plus cele adăugate începând de la poziția n+k-1 către 0.
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Geografie,
9 ani în urmă
Limba română,
9 ani în urmă