Informática, perguntado por lucas27484, 7 meses atrás

Um dia, os três amigos Leakim, Sarev e Odranoel decidiram fazer um time e participar de competições de programação. Os participantes geralmente recebem vários problemas durante essas competições. Bem antes do início, os amigos decidiram que só iriam implementar a solução de um problema se pelo menos dois deles tivessem certeza da solução. Caso contrário, eles não iriam escrever a solução.

Dessa forma, dado que a competição oferece n problemas aos participantes, e sabendo quais amigos tem certeza das soluções, ajude-os a encontrar o número de problemas para os quais eles vão escrever uma solução.

Entrada:

A primeira linha de entrada contém um único inteiro 1 <n<1000 referente ao número de problemas na competição. Depois, n linhas com três inteiros cada, sendo cada inteiro 0 ou 1. Se o primeiro número da linha é igual a 1. então Leakim tem certeza da
solução, caso contrário ele não sabe. O segundo número mostra a visão de Sarev da solução e o terceiro número mostra a visão de Odranoel. Os números nas linhas são separados por espaços.

Saída:

Imprima urn único inteiro indicando o número de problemas que os amigos vão implementar na competição.​

Anexos:

Soluções para a tarefa

Respondido por GeBEfte
2

Seguindo os exemplos mostrados, vamos limitar a interação com o usuário a captar o valor de "n" e das "n" linhas de resoluções dos programadores, não serão utilizados textos para nestas solicitações.

Ainda, como não é pedido no texto, não incluiremos uma etapa de validação de dados ou de controle/tratamento de exceções e, dessa forma, será responsabilidade do usuário preencher corretamente os dados necessários.

Sem mais delongas, vamos apresentar duas possíveis resoluções, muito semelhantes, para este exercício.

Como estamos utilizando inteiros (0 e 1) para representar as resoluções individuais (enviar ou não uma solução) dos três programadores e é necessário que pelo menos dois concordem em enviar uma solução, podemos utilizar o somatório desses três inteiros para decidir se será escrita a solução.

Portanto, se a soma das resoluções individuais for maior ou igual a 2, uma solução será escrita.

[Python 3.8]

1ª Opção:

\sf total ~= ~0\\n~ =~ int(inpu t())\\~~~~for~ i~ in~ range(n):\\~~~~~~~~  resp~ =~ str(inpu t())\\~~~~~~~~  resp~ =~ resp.split()\\~~~~~~~~  if~ int(resp[0])+int(resp[1])+int(resp[2])~ &gt;=~ 2:\\    ~~~~~~~~~~~~total~ +=~ 1\\print(total)

2ª Opção:

\sf total ~= ~0\\n~ =~ int(inpu t())\\~~~~for~ i~ in~ range(n):\\~~~~~~~~  resp~ =~ str(inpu t())\\~~~~~~~~  resp~ =~ map(int, resp.split())\\~~~~~~~~  if~ sum(resp)~ &gt;=~ 2:\\    ~~~~~~~~~~~~total~ +=~ 1\\print(total)

Explicação:

--> Perceba que os dois códigos são muito parecidos, utilizamos a variável "total" para guardar o número de problemas que serão respondidos, "n" para guardar o número de problemas e "resp" para guardar guardar as resoluções (uma por vez) dos três programadores.

--> O programa recebe cada resolução como uma string e, através do método split(), separa a string em uma lista contendo os três caracteres ('0' e '1'). Observe que, agora, estes caracteres estão indexados e, portanto, podemos acessa-los individualmente.

--> Nesse ponto, ainda temos os 1's e 0's como caracteres, não são inteiros e é aqui que as duas resoluções propostas se diferem. Na 1ª opção, utilizamos funções de casting int() para converter os 0's e 1's em inteiros e, daí, efetuamos a soma entre eles, a lista "resp" permanece inalterada. Já na 2ª opção, a lista "resp" é convertida em uma lista de inteiros utilizando a função map() e, com auxílio da função sum(), obtemos o somatório dos itens nessa lista.

--> No final do programa, ainda dentro do laço for, verificamos se o somatório das resoluções é maior ou igual a 2 com um condicional (if) e, caso positivo, incrementamos a variável "total" que será mostrada na tela ao fim do programa.

\Huge{\begin{array}{c}\Delta \tt{\!\!\!\!\!\!\,\,o}\!\!\!\!\!\!\!\!\:\,\perp\end{array}}Qualquer~d\acute{u}vida,~deixe~ um~coment\acute{a}rio

Perguntas interessantes