Questão 44: intersectMSet
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 intersectMSet (int N, int v1[N] , int v2[N] , int r[N])
que coloca no array r
o resultado da interseçã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];
> intersectMSet(8, v1, v2, r);
> r
(int [8]) {0, 1, 0, 0, 0, 0, 0, 2}
Resolução
#define min(a,b) a < b ? a : b;
int intersectMSet (int N, int v1[N], int v2[N], int r[N]) {
int i, len = 0;
for(i = 0; i < N; i++) {
r[i] = min(v1[i], v2[i]);
len += r[i];
}
return len;
}