👤

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.



Ce este gresit la codul meu :


void Insert(int a[], int &n)
{
int i,j,q=-1,p=0;
for (i=0; i int v[n+p];
for (i=0; i {
q++;
v[q]=a[i];
if (a[i]%2==1) {q++; v[q]=2*a[i];}
}
n+=p;
for (i=0; i}

?

Primesc Caught fatal signal 11 la 4/10 teste.


Răspuns :

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:

din start am aflat câte (k) impare sunt. Am luat o variabilă j=n+k-1;  Parcurg vectorul cu i, dar scriu pe locul j. În final, actualizare n.

p.s. codul tău îl văd trunchiat... nu/l pot comenta :(((