Solução Contando Estrelas

por

Solução por Rogério Júnior

A questão pede, dado o valor de N, quais o números positivos menores que N que não aparecem em uma lista de inteiros dada. Vamos criar um vetor de inteiros chamado $$marcado$$, que vai de 1 até N. Ele começará completamente zerado, para isso, usaremos a função $$memset$$ da $$cstring$$, que troca todos os bytes de um array. Se não a conhece, clique aqui. Para cada número $$i$$ que aparecer na lista, o valor de $$marcado[i]$$ será convertido para 1. Ao final da entrada, vamos imprimir, em ordem, todos os índices do vetor que continuam guardando o valor $$0$$, pois não foram citados na lista. Além disso, vamos ter salvo uma variável inteira $$controle$$ que também começará zerada. Quando encontrarmos uma valor no vetor que deva ser impresso, o valor de $$controle$$ passará a ser 1. Assim, se após examinarmos todo o vetor, $$controle$$ continuar com $$0$$, então nada foi impresso e deveremos imprimir “*”. Vamos ao código:


#include <cstdio> // printf e scanf
#include <cstring> // memset
#define MAXN 10100 // limite de N
int n, r, controle, vetor[MAXN]; // declaração de variáveis
int main(){
while(scanf("%d %d", &n, &r)!=EOF){ // leia até o fim de arquivo
memset(vetor, 0, sizeof(vetor)); // zere o vetor
for(int i=1; i<=r; i++){ // para cada valor dado
int estrela;
scanf("%d", &estrela); // leia o inteiro
vetor[estrela]=1; // e marque que ele apareceu
}
controle=0; // zere controle
for(int i=1; i<=n; i++){ // para cada estrela
if(vetor[i]==0){ // se ela não foi marcada
printf("%d ", i); // imprima seu índice
controle=1; // e faça controle receber 1
}
}
if(controle==0) printf("*"); // se controle for 0, então nenhuma estrela foi impressa e devemos imprimir "*"
printf("\n"); // imprima a quebra de linha
}
return 0;
}

Nosso leitor Roger Benet também apresentou uma solução correta em java:


import java.io.*;
public class Main {
public static void main(String[] args)throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int[] vet = new int[11000];
int n,r,i,k;
boolean ok;
String w;
String[] aux;
while((w = in.readLine()) != null){
aux = w.split(" ");
n = Integer.parseInt(aux[0]);
r = Integer.parseInt(aux[1]);
aux = in.readLine().split(" ");
for(i = 0; i < r; i++){
k = Integer.parseInt(aux[i]);
vet[k] = 1;
}
ok = true;
for(i = 1; i <= n; i++){
if(vet[i] == 0){
sb.append(i).append(" ");
ok = false;
}
}
if(ok == false){
System.out.println(sb.toString());
}
else {
System.out.println("*");
}
sb.delete(0,sb.length());
for(i = 1; i <= n; i++)
vet[i] = 0;
}
}
}

view raw

IS4-benet.java

hosted with ❤ by GitHub


Comentários

Comente