Pesquisar este blog

Livros Recomendados

sábado, 2 de janeiro de 2021

URI - 1120 - Revisão de Contrato - Strings - C

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: 

Nesta solução, criei uma função getTamanho para não precisar incluir a biblioteca string.h e obter o tamanho da cadeia de caracteres informada. Utilizei um array resposta para obter os dígitos informados, exceto quando o dígito é igual a n, portanto ele tem a resposta e é só imprimi-lo. O caso em que j == i é o último caso, para imprimir zero e quebrar a linha.

#include <stdio.h>

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

int main() {
    
    int n, i, j, k, digito;
    char str[101], resposta[101];
    
    while (scanf("%i %s", &n, str) != EOF) {
        
        if (n == 0 && !strcmp(str, "0"))
            exit(0);
        
        for (i = 0, j = 0; i < getTamanho(str); i++) {
            
            digito = str[i] - '0';
            
            if (n != digito)
                resposta[j++] = str[i];
                
        }
        
        for (i = 0; i < j; i++)
            if (resposta[i] != '0')
                break;
        
        if (j == i)
            printf("0\n");
        else {
            for (k = i; k < j; k++)
                printf("%c", resposta[k]);
            
            printf("\n");
        }
    }

    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