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>intmain(){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"); } }return0;}
#include<iostream>#include<set>usingnamespace std;intmain(){int N, R, x; set<int> naoSobreviventes;while(cin >> N >> R){for(int i =1; i <= N; ++i){naoSobreviventes.insert(i); }for(int i =0; i < R; ++i){ cin >> x;naoSobreviventes.erase(x); }if(naoSobreviventes.size() ==0){ cout <<'*'<< endl; }else{for(set<int>::iterator it =naoSobreviventes.begin(); it !=naoSobreviventes.end(); ++it){ cout <<*it <<' '; } cout << endl; } }return0;}
var input =require('fs').readFileSync('./input.txt','utf8');var lines =input.split('\n');while(lines.length){let [N, R] =lines.shift().trim().split(' ').map((x) =>parseInt(x));let naoSobreviventes =newSet();for(let i =1; i <=N; ++i){naoSobreviventes.add(i); }let mergulhadores =lines.shift().trim().split(' ').map((x) =>parseInt(x));mergulhadores.map((mergulhador) =>naoSobreviventes.delete(mergulhador)); naoSobreviventes =Array.from(naoSobreviventes);if(naoSobreviventes.length===0) console.log('*');elseconsole.log(`${naoSobreviventes.join(' ')} `);}
whileTrue:try: N, R = [int(x)for x ininput().strip().split(' ')] voluntarios = [Falsefor i inrange(N +1)]for mergulhador in [int(x)for x ininput().strip().split(' ')]: voluntarios[mergulhador]=Trueif(N == R):print('*')else:for i inrange(1, N +1):if(not voluntarios[i]):print(f'{i} ', end='')print()exceptEOFError:break