#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
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
Geografie,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Biologie,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Fizică,
9 ani în urmă