Informatică, întrebare adresată de uionutalin, 8 ani în urmă

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?
boiustef: depăşire de timp?
uionutalin: Da, depășirea de timp e problema
uionutalin: 2721

Răspunsuri la întrebare

Răspuns de boiustef
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.


uionutalin: Multumesc mult
Alte întrebări interesante