TOPIC

Wrong answer (100%)

Denildo Veloso Braga asked 2 years ago

Qual o erro? '-'

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

void main()
{
    char a[101], b[101];
    int t,i,j,k;

    scanf(" %d ", &t);

    for(j=0; j<t; j++)
    {
        gets(a);
        gets(b);

        char nome[strlen(a)+strlen(b)+1];

        for(i=0, k=0; i<strlen(a); i+=2)
        {
            nome[k++]=a[i];
            nome[k++]=a[i+1];
            nome[k++]=b[i];
            if(b[i+1]!='\0')
                nome[k++]=b[i+1];
        }

        puts(nome);
    }
}

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

  • Luis Fernando Veronese Trivelatto replied 2 years ago

    A variável 'nome' está sendo criada na pilha com lixo; como não está sendo colocado o caracter '\0' no final, pode ser que o puts imprima mais caracteres do que os que foram atribuídos no laço. Em alguns casos pode dar certo se a variável for inicializada com lixo com valor 0. Uma alternativa seria nem usar armazenar os caracteres em uma string e simplesmente ir imprimindo eles dentro do laço.

    Aproveitando, uma dica é não colocar strlen na condição do for pra iterar por uma string; é possível que o compilador otimize, mas, se não otimizar, o código pode ficar calculando o tamanho da string em toda iteração, jogando a complexidade pra quadrática. Então é preferível ou armazenar o strlen antes do laço ou usar

    for(i = 0; a[i]; i++)

    que vai interromper o laço quando a[i] for igual ao '\0', pois o valor desse caracter é 0 e então resultará falso na condição.