Nesse post resolvo "Biblioteca Pascal", um problema ad-hoc do beecrowd. É um problema que envolve estruturas de repetição, de condição e array. Na minha solução, uso também o operador ternário, que basicamente é uma estrutura condicional também. Veja abaixo e compare com a sua solução!
Plataforma: URI (BEECROWD)
Problema: 1267
Enunciado:
A Universidade Pascal é uma das mais antigas do país e precisa renovar seu edifício da biblioteca, porque depois de todos esses séculos o edifício começou a mostrar os efeitos de suportar o peso da enorme quantidade de livros que abriga.
Para ajudar na renovação, a Associação de Antigos Alunos da Universidade decidiu organizar uma série de jantares para angariação de fundos, para os quais todos os alunos foram convidados. Estes eventos provaram ser um enorme sucesso e vários foram organizados durante o ano passado. (Uma das razões para o sucesso desta iniciativa parece ser o fato de que os alunos que passaram pelo sistema de ensino Pascal tem boas lembranças daquele tempo e gostariam de ver a Biblioteca da Universidade renovada.)
Os organizadores mantiveram uma planilha indicando quais alunos participaram de cada jantar. Agora eles querem sua ajuda para determinar se algum aluno ou aluna participou de todos os jantares.
Linguagens: C e C++
Solução:
A estratégia dos códigos C e C++ é a mesma, utilizar um array de alumni e colocar 1 na posição dele se o valor for igual a zero. Se ele já tiver lido um valor diferente, vai acabar ignorando. Isso significa que as posições do vetor que tiverem o valor zero estarão assim porque tinham 1 em todos os jantares. Assim, basta criar mais um laço de repetição no fim verificando se há alguma posição do vetor com zero, se tiver a resposta já será yes.
Código em C:
#include <stdio.h> #include <string.h> int main() { int n, d; while (scanf("%d %d", &n, &d) != EOF) { if (!n) break; int alunos[n], r = 0, v, i; memset(alunos, 0, sizeof(alunos)); while (d--) { for (i = 0; i < n; i++) { scanf("%d", &v); if (!v) alunos[i] = 1; } } while (n) if (!alunos[--n]) { r = 1; break; } printf("%s\n", r? "yes" : "no"); } return 0; }
#include <iostream> #include <cstring> using namespace std; int main() { int n, d, i, v, r; while (cin >> n >> d) { if (!n) break; int alunos[n]; memset(alunos, 0, sizeof(alunos)); r = 0; while (d--) { for (i = 0; i < n; i++) { cin >> v; if (!v) alunos[i] = 1; } } while (n) if (!alunos[--n]) { r = 1; break; } cout << (r? "yes" : "no") << endl; } return 0; }