Pesquisar este blog

Livros Recomendados

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

sábado, 9 de julho de 2022

URI (BEECROWD) - 3214 - Refrigerante - Iniciante - C e C++

Ajude o blog! PIX para doações: 6d8bc7a8-5d74-493a-ab7a-3515baf35956

Fala, pessoal! Retornei aqui mais uma vez para resolver um exercício mais recente do Beecrowd, ou melhor, do Nordic Collegiate Programming Contest 2009, mas postado no Beecrowd.

Confesso que está difícil atualizar o blog com frequência devido à falta de apoio, mas vou atualizar sempre que for possível! :-)

Antes de resolver qualquer algoritmo do BEECROWD, recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar arquivos de entrada para teste, considerando as entradas de exemplo do URI, do udebug e outros valores limite;
  4. Preparar o ambiente de desenvolvimento e utilizar os mesmos parâmetros dos compiladores do URI
  5. Preparar um código-fonte padrão, já contendo a chamada às bibliotecas padrão, pré-processadores, retorno de função e um comando de escrita com "\n", pois no URI a grande maioria dos problemas exige a quebra de linha final.


Plataforma
: URI (BEECROWD)

Problema3214

Enunciado:

Tim é um bebedor de refrigerante absolutamento obsessivo, ele simplesmente não consegue o suficiente. Mais irritantemente porém, ele quase nunca tem dinheiro, então sua única forma legal mais óbvia de obter mais refrigerante é pegar o dinheiro que ele recebe quando recicla garrafas vazias de refrigerante para comprar novas. Para adicionar com as garrafas resultantes de seu próprio consumo, ele às vezes encontra garrafas vazias na rua. Um dia ele estava com muita sede, então ele realmente bebeu refrigerantes até que ele não pudesse pagar um novo.

Entrada: A entrada cosiste de três inteiros não negativos E, F, C, onde E < 1000 é igual ao número de garrafas de refrigerante vazias na posse de Tim no ínicio do dia, F < 1000 é o número de garrafas de refrigerante vazias encontradas durante o dia, e 1 < C < 2000 é o número de garrafas fazias necessárias para comprar um novo refrigerante.

Linguagens: C e C++

Solução:

Num primeiro momento, poderíamos pensar apenas em (E+F)/C, o que daria a quantidade total de garrafas possível de se comprar inicialmente. A grande questão está exatamente na palavra "inicialmente", pois ele tomará (E+F)/C garrafas de refrigerante e se essa quantidade for maior ou igual a C, ele ainda poderá trocar estas garrafas por novas garrafas de refrigerante, e assim por diante.

Confesso que custei alguns minutos até perceber isso. A grande sacada então é obter esta soma (E+F) acrescida do resto da divisão inteira entre soma/C, ou seja, as garrafas que vão sobrando, e dividindo estes valores por C. Assim, a cada iteração no laço acumula-se o valor de soma/C numa variável e ao final apenas imprime-se esta variável.

Código em C:
#include <stdio.h>

int main() {
    
    unsigned short int e, f, c, r = 0, resto = 0, soma;
    scanf("%hu %hu %hu", &e, &f, &c);
    
    soma = e + f;
    while (soma / c > 0) {
        r += soma / c;
        resto = soma % c;
        soma = resto + soma / c;
    }
    
    printf("%hu\n", r);
}

Código em C++:
#include <iostream>

using namespace std;

int main() {
    
    unsigned short int e, f, c, r = 0, resto = 0;
    cin >> e >> f >> c;
    
    unsigned short soma = e + f;
    while (soma / c > 0) {
        r += soma / c;
        resto = soma % c;
        soma = resto + soma / c;
    }
    
    cout << r << endl;
    return 0;
}

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