361
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ă
nva avea lungimea cel mult800.000 - inițial vectorul are cel puțin un element
0 ≤ a[i] ≤ 1.000.000, pentru oricei=0,n-1.- vectorul este indexat de la
0lan-1 - este garantat că vectorul
ava 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.
void Insert(int a[], int &n){
int cnt = 0;
for(int i = 0; i < n; ++i)
if(a[i] % 2 == 1)
cnt++;
for(int i = n + cnt - 1, j = n - 1; i >= 0, j >= 0; --i, --j){
if(a[j] % 2 == 1){
a[i] = a[j] * 2;
a[i-1] = a[j];
i--;
}
else
a[i] = a[j];
}
/*
5
1 2 3 4 5
cnt = 3;
i = 8, j = 5;
daca a[j] este impar -> 5 10 i--;
i--, j--;
i = 6, j = 4;
daca a[j] este par -> il pun pe 4 normal in sir, la pozitia i = 6;
i--, j--;
i = 5, j = 3;
daca a[j] este impar -> 3 6 i--;
i--, j--; 1 2 3 3 6 4 5 10
i = 3, j = 2;
daca a[j] este par -> il pun pe 2 normal in sir, la pozitia i = 3;
i--, j--;
i = 2, j = 1;
daca a[j] este impar -> 1 2 i--;
i--, j--;
i = j = 0;
1 2 2 3 6 4 5 10
*/
n += cnt;
}
Comentarii