Pesquisar este blog

Livros Recomendados

sábado, 2 de janeiro de 2021

URI - 1120 - Revisão de Contrato - Strings - C++ - Solução Alternativa

Plataforma: URI
Problema1120

Enunciado:
Durante anos, todos os contratos da Associação de Contratos da Modernolândia (ACM) foram datilografados em uma velha máquina de datilografia. Recentemente Sr. Miranda, um dos contadores da ACM, percebeu que a máquina apresentava falha em um, e apenas um, dos dígitos numéricos. Mais especificamente, o dígito falho, quando datilografado, não é impresso na folha, como se a tecla correspondente não tivesse sido pressionada. Ele percebeu que isso poderia ter alterado os valores numéricos representados nos contratos e, preocupado com a contabilidade, quer saber, a partir dos valores originais negociados nos contratos, que ele mantinha em anotações manuscritas, quais os valores de fato representados nos contratos. Por exemplo, se a máquina apresenta falha no dígito 5, o valor 1500 seria datilografado no contrato como 100, pois o 5 não seria impresso. Note que o Sr. Miranda quer saber o valor numérico representado no contrato, ou seja, nessa mesma máquina, o número 5000 corresponde ao valor numérico 0, e não 000 (como ele de fato aparece impresso).

Linguagem: C++

Solução: 

Basta verificar se o dígito atual é igual ao número n. Se não for, salva na string resposta. Foi feito também um teste de zeros à esquerda, pois eles devem ser descartados. 

#include <iostream>

using namespace std;

int getTamanho(string palavra) {
    int i = 0;
    
    while (palavra[i] != '\0')
        i++;
    
    return i;
}

int main() {
    
    int n;
    string str;
    
    while (cin >> n >> str) {
        
        if (n == 0 && !str.compare("0"))
            exit(0);
        
        string resposta = "";
        
        for (int i = 0; i < getTamanho(str); i++) {
            
            int digito = str[i] - '0';
            
            if (n  != digito)
                resposta.append(1, str[i]);
                
        }
        
        int zerosAEsquerda;
        for (zerosAEsquerda = 0; zerosAEsquerda < getTamanho(resposta); zerosAEsquerda++)
            if (resposta[zerosAEsquerda] != '0')
                break;
        
        string final = resposta.substr(zerosAEsquerda, getTamanho(resposta));
        
        if (getTamanho(final) == 0)
            final = "0";
            
        cout << final << endl;
    }

    return 0;
}

Nenhum comentário:

Postar um comentário

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