TOPIC

Wrong anser 100. C++

a284 asked 1 month ago

Não sei o que está dando errado mas meu código não retorna valor nenhum?

include include

using namespace std;

int main()

{

int cont = 0, casos, tamanho, i, controle = 1, cont1 = 0, cont2 = 0;

string parte1, parte2, nome;

nome = '/0';

cin >> casos;

while (cont < casos){

    fflush(stdin);

    getline(cin, parte1);

    fflush(stdin);

    getline(cin, parte2);

    tamanho = parte1.length() + parte2.length();

    for (i = 0; i < tamanho; i++){

        if (controle < 2){

            nome[i] = parte1[cont1];

            cont1++;

            controle++;

        }else{

            if (controle%2 == 1){

                nome[i] = parte2[cont2];

                cont2++;

                controle++;

            }else{

                nome[i] = parte2[cont2];

                cont2++;

                controle = 0;

            }

        }

    }

    cout << nome <<endl;

    cont++;

}

return 0;

}

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

  • feodorv replied 4 weeks ago

    You can declare variables when you need them. I mean

    int cont = 0, casos;
    string tmp;
    
    cin >> casos;
    getline( cin, tmp);
    
    while (cont < casos)
    {
        int  tamanho, i, controle = 1, cont1 = 0, cont2 = 0;
        string parte1, parte2, nome;
    
        getline(cin, parte1);
        ...
    }

    Also you use nome[i] without reserving the necessary amount of memory:

    tamanho = parte1.length() + parte2.length();
    nome.reserve( tamanho );

    or use push_back() (https://www.cplusplus.com/reference/string/string/):

            if (controle < 2){
                nome.push_back( parte1[cont1] );
                cont1++;
                controle++;
            }else{
          ...

    As for getchar(), please, see here https://www.urionlinejudge.com.br/judge/en/questions/view/2690/10221

  • a284 replied 1 month ago

    Dei reset nos valores e troquei o fflush por getchar(), é necessario limpar o buffler da totalmente errado se eu nao o fizer. Mas continua dando errado. Por algum motivo ele começa a contar o meu cont2 como 1 e não como 0.

  • feodorv replied 1 month ago

    Do not use

    fflush(stdin);

    together with C++ I/O. If you want to eat the remaining '\n' after cin >> casos you can use

    cin >> casos;
    getline( cin, parte1);
    while (cont < casos){
        getline(cin, parte1);
        ...
       }

    Also you did not reset the values controle, cont1 and cont2 after each test case.