Ir ao conteúdo
  • Cadastre-se

C O problema da revisão de contrato


paulo leal

Posts recomendados

O problema da revisão de contrato: 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).


Faça um programa que recebe como entrada diversos valores de contrato, cada um em uma
linha. Cada linha contém dois inteiros D e N (1 ≤ D ≤ 9, 1 ≤ N < 10100 ), representando,
respectivamente, o dígito que está apresentando problema na máquina e o número que foi
negociado originalmente no contrato (que podem ser grande, pois Modernolândia tem sido
acometida por hiperinflação nas últimas décadas).
O ultimo valor é seguido por uma linha que contém apenas dois zeros separados por
espaços em branco, para representar o fim da entrada.


Para cada caso valor da entrada o seu programa deve imprimir uma linha contendo um único
inteiro V, o valor numérico representado de fato no contrato. Veja o exemplo de entrada e
seguida a seguir.

image.png.b9238e216fc00a48821d000a9c76920c.png

alguém pode me ajudar com essa questão olha o que eu fiz

#include <stdio.h>
#include <string.h>

int main() {
    char contrato[10100];
    int i,j,tecla,copia[10100];
    printf("Digite a tecla com defeito e o numero de contrato");
    scanf("%d",&contrato);
    for(i=0; i<strlen(contrato); i++){
        tecla=contrato[0];
        copia[i]=atoi(contrato);
        for(j=3; j<strlen(contrato); j++){
            if(tecla==copia[j]){
                copia[j]=copia[j+1];
                printf("%d",copia[j]);
            }
        }
    }
    getchar();
}

mas não da em nada

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@paulo leal     essa questão está no uri online e olhei aqui e vi que o número dela é 1120 .    então fiz esse código no dev c++ da versão 4.9.9.2, e ficou bem diferente do seu,  e ainda não testei,  então experimente para ver se resolve .

#include <cstdio>
#include <cstring>
char *removerCaractere(char *arr, char d)
{
    int i;
    // remove digitos
    for (i = 0; i < strlen(arr); i++)
    {
        if (arr[i]-48 == d)
        {
            if (strlen(arr) == 1)
            {
                arr[0] = '0';
            }
            else
            {
                memmove(&arr[i], &arr[i+1], strlen(arr)-i);
                i = -1;
            }
        }
    }
    // limpa os zeros à esquerda
    for (i = 0; i < strlen(arr); i++)
    {
        if (arr[i] >= '1' && arr[i] <= '9')
        break;
        if (strlen(arr) == 0)
        {
            arr[0] = '0';
        }
        else
            if(arr[i+1] != '\0')
            {
                memmove(&arr[i], &arr[i+1], strlen(arr)-i);
                i = -1;
            }
    }
    return arr;
}
int main()
{
    int d=1,i;
    char *n = new char [1001];
    while (!(d == 0 && n[0] == '0'))
    {
        scanf("%d %s", &d, n);
        if (d != 0 && n[0] != '0')
        {
            n = removerCaractere(n, d);
            printf("%s\n",n);
        }
    }
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@devair1010 Eu tava tentando aqui e conseguir resolver olha ai o codigo:

#include<stdio.h>
#include<string.h>

int main ( ) {
    int tam, i, zero, aux;
    char entrada[10100], N;
    while ( 1 ) {
        scanf ( "%c\n", &N );
        scanf ( "%s", entrada );
        if ( N == '0' || strcmp ( entrada, "0" ) == 0 )
            return 0;
        tam = strlen ( entrada );
        aux = 1, zero = 0;
        for ( i=0; i<tam; i++ ) {
            if ( entrada[i] == '0' && zero == 2 )
                printf ( "%c", entrada[i] );
            if ( entrada[i] != '0' && N!='0' && entrada[i] != N ) {
                printf ( "%c", entrada[i] );
                aux = 0;
                zero = 2;
            }
        }
        if ( N!= '0' && aux == 1 && zero == 1 ) {
            printf ( "0" );
        }else if ( N!='0' && aux == 1 )
            printf ( "0" );
        puts ( "" );
        getchar();
    }
}

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

@paulo leal man, qual foi a logica que você usou? eu não consegui entender

adicionado 0 minutos depois
Em 14/03/2018 às 23:47, paulo leal disse:

@devair1010 Eu tava tentando aqui e conseguir resolver olha ai o codigo:


#include<stdio.h>
#include<string.h>

int main ( ) {
    int tam, i, zero, aux;
    char entrada[10100], N;
    while ( 1 ) {
        scanf ( "%c\n", &N );
        scanf ( "%s", entrada );
        if ( N == '0' || strcmp ( entrada, "0" ) == 0 )
            return 0;
        tam = strlen ( entrada );
        aux = 1, zero = 0;
        for ( i=0; i<tam; i++ ) {
            if ( entrada[i] == '0' && zero == 2 )
                printf ( "%c", entrada[i] );
            if ( entrada[i] != '0' && N!='0' && entrada[i] != N ) {
                printf ( "%c", entrada[i] );
                aux = 0;
                zero = 2;
            }
        }
        if ( N!= '0' && aux == 1 && zero == 1 ) {
            printf ( "0" );
        }else if ( N!='0' && aux == 1 )
            printf ( "0" );
        puts ( "" );
        getchar();
    }
}

 

man, qual foi a logica que você usou? eu não consegui entender

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!