Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 2143. Mostrar todas as postagens
Mostrando postagens com marcador 2143. Mostrar todas as postagens

quarta-feira, 3 de março de 2021

URI (BEECROWD) - 2143 - A Volta do Radar - Iniciante - C e C++

Pessoal, este é mais um exercício que resolvo. A Volta do Radar, um exercício iniciante, bem simples e ideal para quem está começando no mundo da programação. Veja na sequência a solução em C e C++!

Plataforma: URI (BEECROWD)

Problema2143

Enunciado:

Todo ano após a competição que ocorre na cidade de Taxilândia, os participantes e os coaches vão para o célebre restaurante Radar. Porém, os garçons (sempre muito gentis e educados) ficam sobrecarregados devido à quantidade de pessoas, e consequentemente, acabam demorando um pouco para atender a um pedido.

Os participantes ou coaches que sentam nas pontas são os privilegiados, pois são atendidos com somente um pedido, mas os demais precisam sempre pedir duas vezes, pois os garçons (apesar de gentis e educados) são desatentos e se esquecem facilmente dos pedidos. Além disso, há uma superstição entre os participantes e coaches de que se não houver um número par de pessoas que não sentam nas pontas, na próxima competição nenhuma equipe da universidade conseguirá vencer.

Portanto, sua tarefa é determinar a soma da quantidade de pedidos de cada um para saber se vale a pena ir ao Radar. Mas apesar do resultado, lembre-se: sempre vale a pena ir ao Radar!

Linguagens: C e C++


Solução:

O raciocínio foi o mesmo nas duas soluções abaixo. Em um laço de repetição infinito, li o valor de t. Se este valor for zero, significa que chegamos na condição de parada e já pode interromper o laço, indo diretamente para o final do programa. Se o valor não for zero, deve realizar t iterações e leituras de "n". 

A variável resposta será o dobro de n-1, e se o valor de n for impar, este valor deve ainda ser acrescido de um. Depois é só escrever a variável resposta.

É importante notar que utilizei bitwise para verificar se o número é ímpar. Isso pode ser feito utilizando mod (operador %), mas preferi fazer com bitwise. O teste n&1 é a mesma coisa que (n& 1) == 1, então, se o último bit de n for 1, 1&1 retorna 1, ou seja, o valor é ímpar.

Era isso!

Código em C:

#include <stdio.h>

int main() {
    
    int t, n, resposta;
    
    while (1) {
        
        scanf("%i", &t);
        if (t == 0) return 0;
        
        while (t--) {
            
            scanf("%i", &n);
            resposta = (n-1) * 2;
            
            if (n & 1)
                ++resposta;
            
            printf("%i\n", resposta);
            
        }
        
    }
}

Código em C++:

#include <iostream>

using namespace std;

int main() {
    
    int t, n, resposta;
    
    while (1) {
        
        cin >> t;
        if (t == 0) return 0;
        
        while (t--) {
            
            cin >> n;
            resposta = (n-1) * 2;
            
            if (n & 1)
                ++resposta;
            
            cout << resposta << endl;
            
        }
        
    }
}

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas