1471 - Mergulho
Aqui podemos usar tanto vetores quanto conjuntos para ver quem não sobreviveu.
Descrição
Solução
Podemos considerar dois caminhos: um usando vetor e outro usando conjuntos.
Pela solução com vetor, podemos utilizar um de N
posições, onde N
é o número de voluntários, para guardar informação sobre quais sobreviveram e quais não, assumindo que, a princípio ninguém voltou, mas marcando verdadeiro
para cada mergulhador que for lendo. Se o número de mergulhadores que retornaram é o mesmo que o número de voluntários, então imprimimos apenas um asterisco. Se o número for menor, precisamos percorrer o vetor imprimindo todos os índices cujo valor seja falso
.
Pela solução com conjunto, podemos criar um conjunto que inicialmente contem todos os voluntários de 1
a N
e ir removendo os voluntários que voltarem da missão, imprimindo os que não sobreviveram ao final da leitura. Mas é importante notar que essa solução só é válida em linguagens que ordenam os elementos do conjunto. Nas soluções exibidas abaixo, veja as alternativas que eu escolhi para cada linguagem suportada aqui.
Não é necessário fazer o tratamento da saída com espaço entre elementos, o problema pede para que você sempre inclua um espaço após todo mergulhador que não sobreviveu.
#include <string.h>
#include <stdio.h>
int main(){
int N, R, mergulhador;
int voluntarios[10001];
while(scanf("%d %d", &N, &R) != EOF){
memset(voluntarios, 0, sizeof(voluntarios));
for(int i = 0; i < R; ++i){
scanf("%d", &mergulhador);
voluntarios[mergulhador] = 1;
}
if(N == R){
printf("*\n");
}else{
for(int i = 1; i <= N; ++i){
if(!voluntarios[i]) printf("%d ", i);
}
printf("\n");
}
}
return 0;
}
Last updated
Was this helpful?