Informatică, întrebare adresată de ionutbarosanu2, 9 ani în urmă

#2721 Insert

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.

Imi da 60p,iar solutia mea e:

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

Răspunsuri la întrebare

Răspuns de boiustef
1

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:

Posibil ai depăşire...

am numărat imparele şi încep completarea tabloului cu dimensiune extinsă, începând completarea de la capătul din dreapta.

Alte întrebări interesante