TOPIC

wrong 20%

Gleider Mackedanz asked 3 years ago

Não entendo porque da wrong 20%, testei várias formas e todas funcionam:

resolvido

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

  • Bruno de Souza Ribeiro replied 3 years ago

    Não entendo meu erro... ta dando 50% WA mas ja testei todas entradas que consegui pensar e deu certo.... Obrigado desde ja....

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    int main(void){
        char letra, input[50], aux[50], aux2[50];
        int i, j=0, n=0, cont=0, tam=0;
        strcpy(aux, "" );
        strcpy(aux2, "" );
        fflush(stdin);
        gets(input);
        tam = strlen(input);
        for(i=0;i<tam;i++){
            if(input[i]=='a' || input[i]=='e' || input[i]=='i' || input[i]=='o' || input[i]=='u'){
                letra = input[i];
                aux[cont]=letra;
                aux[cont+1]='\0';
                cont++;
            }
        }
        for(i=cont-1;i>=0;i--){
            aux2[j]=aux[i];
            j++;
        }
        for(i=0; i<=cont ; i++){
            if(aux[i]!=aux2[i]){
                printf("N\n");
                break;
            }
        }
        if(i>cont){
            printf("S\n");
        }
        return 0;
    }
    </code>
  • Luis Fernando Veronese Trivelatto replied 3 years ago

    O erro está naquela parte final da função inverte. Quando você faz i *= 2+1 a instrução vira i = 3i (pois embora a multiplicação tenha precedência maior que a soma, como você está usando o operador atribuição por multiplicação, o lado direito inteiro será executado antes de executar a multiplicação - http://pt.cppreference.com/w/cpp/language/operator_precedence), acho que você queria fazer i = 2i + 1.

    Uma outra coisa é que na verdade você nem precisa calcular esse i para setar o '\0', pois a função 'inverte' recebeu uma string que já está finalizada com o '\0'. Como ela não altera o tamanho da string e não modificou o valor na posição do '\0', o '\0' continua lá.