TOPIC

Me ajuda pessoal, Wrong answer (50%)

Murilo Rodrigues asked 3 years ago

Boa noite pessoal, travei neste problema e não consigo resolver, acho que já testei todas as entradas do uDebug do pessoal aqui do forum e não consegui resolver. Se tiver como alguém me explicar o porque. Retornou: Wrong answer (50%)

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main(void){
    int tamanho, i;
    long long int numeroFinal;
    char entrada[51], numero[51];
    while(gets(entrada)!=NULL){
        setbuf(stdin,NULL);
        tamanho= strlen(entrada);
        i=0;
        for(int i2=0; i2<tamanho;i2++){
            if(isdigit(entrada[i2])){
                numero[i] = entrada[i2];
                i++;
            }else if(isalpha(entrada[i2])){
                if(entrada[i2]=='l'){
                    numero[i]= '1';
                    i++;
                }else if(tolower(entrada[i2])=='o'){
                    numero[i] = '0';
                    i++;
                }
            }
        }
        numero[i]= '\0';
        numeroFinal = atoi(numero);
        if(strlen(numero)==0 || numeroFinal > 2147483647 || numeroFinal < 0 || strlen(numero)>10) printf("error\n");
        else printf("%lld\n",numeroFinal);
    }
    return 0;
}

Remember not post solutions. Your post may be reviewed by our moderators.

  • Alexandre Gadelha replied 2 years ago

    Enquanto a questão dos dígitos de 0-9 e dos "l", "o" e "O" foram resolvidas, o problema diz que vírgulas e espaços em branco são permitidos mas não serão computados na saída.

    Quanto as outras letras, será que elas são válidas na saída ou devem apresentar mensagem de "error" também?

    A função ATOI utilizada, só serve para conversão de valores numéricos dentro de uma String para uma variável do tipo INT com valores de até 2³¹ - 1 (Linha 28). Mesmo se mudar a formatação de saída pra Long Long Int (Linha 30), não fará diferença se a variável tiver um suporte menor. Encontre uma função equivalente que faça uma conversão e que ofereça um suporte a um tipo de variável maior.

    Experimente utilizar o UDebug para fazer uma verificação das saídas geradas pelo seu algoritmo e comparando com a saída gerada pelo UDebug.

    Contudo, nesse exercício, o UDebug apresenta problema em casos de teste em específico, apontarei alguns que notei abaixo:

    Entrada:

    o o2147483647
    OO2147483647

    Saída esperada real:

    2147483647
    2147483647

    Saída que o UDebug erroneamente gera:

    error
    error

    Tirando isso, tá ok. Sem mais falsos-positivos.