Questão 45: unionMSet
Voltar
Uma forma de representar multi-conjuntos de índices consiste em usar um array de inteiros contendo em cada posição o número de ocorrências desse índice. Assim o multi-conjunto {1, 1, 4, 7, 7, 7}
seria representado por um array em que as primeiras 8 posições conteriam {0, 2, 0, 0, 1, 0, 0, 3}
.
Apresente uma definição da função int unionMSet (int N, int v1[N], int v2[N], int r[N])
que coloca no array r
o resultado da união dos multi-conjuntos v1
e v2
.
Exemplo
> int v1[8] = {0, 2, 0, 0, 1, 0, 0, 3};
> int v2[8] = {1, 1, 3, 0, 0, 1, 0, 2};
> int r[8];
> unionMSet(8, v1, v2, r);
> r
(int [8]) {1, 2, 3, 0, 1, 1, 0, 3}
Resolução
#define max(a,b) a > b ? a : b;
int unionMSet (int N, int v1[N], int v2[N], int r[N]) {
int i, len = 0;
for(i = 0; i < N; i++) {
r[i] = max(v1[i], v2[i]);
len += r[i];
}
return len;
}