TOPIC

PROBLEM 1263 - URI Fórum 1.0

URI Online Judge asked 7 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • 🧙The Install Wizard 🧙 replied 4 years ago

    Um aliteração consiste de 2 ou mais palavras.

  • md forhad hossain replied 5 years ago

    can anyone tell me, what is the wrong with my code :/

    //other necessary header included -_- 
    #define FOR(i,n) for(int i=0;i<(n);++i)
    void alliteration(string s)
    {
        vector<string> vs;
        stringstream is(s);
        string buf;
        while(is >> buf)
        {
            vs.push_back(buf);
        }
        //int i = 0;
        FOR(i,vs.size())cout << vs[i] << endl;
    
        int f = 0;
        FOR(i,vs.size()-1)
        {
            string s1 = vs[i];  // forhad for fun fables
            string s2 = vs[i+1];
            if(s1[0] == s2[0]){
                f++;
                i++;
            }
        }
        cout << f << endl;
    
    }
  • Vitor Rocha replied 6 years ago

    Alguém saberia me dizer por que está dando WA nesse código? Não consegui encontrar um caso de teste que não desse certo.

    #include <stdio.h>
    #include <ctype.h>
    
    int main()
    {
        char str[10000];
        char *p;
        char temp, aux;
        int jaMarcou;
        int n;
    
        while (gets(str)) {
            p = str;
            n = 0;
            jaMarcou = 0;
            temp = '\0';
    
            while (*p != '\0') {
                aux = tolower(*p);
    
                if (aux == temp && !jaMarcou) {
                    n++;
                    jaMarcou = 1;
                } else if (aux != temp) {
                    jaMarcou = 0;
                    temp = aux;
                }
    
                while (*p != ' ')
                    p++;
                p++;
            }
    
            printf("%d\n", n);
        }
    
        return 0;
    }
  • Gabriel Alamiro replied 4 years ago

    Olá estou recebendo 20% de erro no meu código. Alguém pode me ajudar?

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main(){
    
        string alite, comp;
        int tam;
    
        while(getline(cin, alite)){
            tam = alite.length();
            ///
            int y = tam;
            while(y--){
              if(alite[y] >= 65 && alite[y] <= 90 && alite[y] != 32){
               alite[y] += 32;
              }
            }
            //cout << "->- " << alite << endl;
            ///
          int cont = 0;
          int o = 0, k = 0; 
            for(int i=0; i<tam; i++){
              if(o == 0){
               comp[0] = alite[i];
               o = 1;
              }else if(o == 1 && alite[i-1] == ' '){
                 if(comp[0] == alite[i] && k == 0){
                  k = 1;
                  cont++;
                 }else{
                  k = 0;
                   comp[0] = alite[i];
                   //cout << "> " << alite[i] << endl;
                 }
              }
    
            }   
    
         cout << cont << endl; 
        }
    
    }

    obrigado pela atenção

  • Lucas Sampaio da Rocha replied 4 years ago

    Letícia, cuidado com a função gets(), ela não é segura. Além disso, é errado comparar a variável "entrada" (vetor de char) com EOF (inteiro). Você pode fazer a leitura dos dados da seguinte forma :

    while(scanf("\n%[^\n]s", entrada) != EOF)
    {
       // lógica aqui
    }
  • Letícia Dos Santos replied 4 years ago

    Olá, meu código está dando Time limit exceeded. Alguém pode me ajudar?

    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char entrada[5100], l1, l2;
        int j, ali, nali;
    
        gets(entrada);
        while(entrada!=EOF){
            j=0;
            ali=0;
            nali=0;
            l1=entrada[j];
            while(entrada[j]!='\0'&&j<strlen(entrada)){
                while((entrada[j]!=' ') && (entrada[j]!='\0') && (j<strlen(entrada))){
                    j++;
                }
                j++;
                l2=entrada[j];
                if(tolower(l1)==tolower(l2)){
                    ali++;
                }else{
                    if(ali!=0){
                        nali++;
                        ali=0;
                    }
                }
                l1=l2;
            }
            printf("%d\n", nali);
            gets(entrada);
        }
        return 0;
    }
  • Julia Carolina replied 4 years ago

    Merci beaucoup!! :)

  • João replied 4 years ago

    Usa memset(frase, 0, sizeof(frase)); depois do fflush(stdin) pra "limpar" o vetor. Aqui http://www.cplusplus.com/reference/cstring/memset/ fala mais sobre essa função.

  • Julia Carolina replied 4 years ago

    Oi pessoal, meu codigo ta dando umas respostas que são no minimo curiosas... Quando eu o testo apenas com a frase: "Round the rugged rock the ragged rascal ran", ele retorna a quantidade certa: 2 aliterações. Mas quando insiro outros casos de testes antes desse, como por exemplo: "No such file or directory tompilation terminated expresso eomo em uexto um uma Round the rugged rock the ragged rascal ran" Aí a resposta vira 4. O que está acontecendo?

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    
    using namespace std;
    
    int novapalavra(char frase[5000], int pos)
    {
        int i;
        for (i = pos; (frase[i] != ' ') && (frase[i] != '\0'); i++);
        return i;
    
    }
    
    int main()
    {
        int i, alit;
        char frase[5000], ult_letra;
        while (gets(frase))
        {
            alit = 0;
            ult_letra = frase[0];
            for (i = 1; frase[i] != '\0'; i++)
            {
                if(frase[i] == ' ')
                {
                    if(ult_letra == frase[i+1] || ((int) (ult_letra + 32)) == (int) frase[i+1] || ((int) (ult_letra - 32)) == (int)frase[i+1])
                    {
                        alit++;
                        do
                        {
                            i = novapalavra(frase, (i+1));
                        }
                        while (ult_letra == frase[i+1] || ((int) (ult_letra + 32)) == (int) frase[i+1] || ((int) (ult_letra - 32)) == (int)frase[i+1]);
                    }
                    ult_letra = frase[i+1];
                }
            }
            printf("%i\n", alit);
            fflush(stdin);
        }
        return 0;
    }
  • Murilo Lacerda replied 4 years ago

    Aaahh ta, obg!

  • Murilo Lacerda replied 4 years ago

    Eae pessoal, so uma pergunta: A frase "He has four fanatic fantastic fans" nao teria que ser 3 aliterações?

    1. He has
    2. four fanatic
    3. fantastic fans

    "Uma aliteração ocorre quando duas ou mais palavras consecutivas de um texto possuem a mesma letra inicial (ignorando maiúsculas e minúsculas)" - parte da questao.

    Sei la, talvez eu nao tenha entendido direito. Mas se alguem puder me explicar...

    VLw

  • Vélmer Oliveira replied 5 years ago

    Descobri o erro, realmente precisa da comparação, mas eu estava comparando erradamente, o correto seria:

    if (i+1) == (len(frase)-1):
        aliteracoes += 1

    Garantindo que o próximo elemento é o ultimo da lista.

  • Vélmer Oliveira replied 5 years ago

    É porque no meu laço, sempre a comparação é feita com a palavra seguinte, e como esse trecho de código está dentro do:

    if str.lower(frase[i][0]) == str.lower(frase[i+1][0]):

    garante que a última palavra está dentro de uma aliteração. Perceba que se você tirar o código que você separou, se a frase terminar em aliteração, a última aliteração não irá contar.

    Pode testar sem o trecho de código que você marcou as seguintes frases se minha explicação tiver ficado um pouco confusa:

    • He has four fanatic fantastic fans - Termina em aliteração, mas a última delas não irá contar.
    • area artic Soul Silly subway ant artic none - Não termina em aliteração, executa normalmente.
  • Matheus Leão replied 5 years ago

    Não entendi este trecho, precisa comparar com a última? Acho que você tem que continuar ignorando palavras seguidas com a mesma letra inicial (só conta uma vez).

  • Vélmer Oliveira replied 5 years ago

    Está dando WA 100%, mas as saídas batem. Alguém pode me ajudar?

    Resolvido
  • Matheus Leão replied 5 years ago

    You need to declare what libraries you are using and your program must have a main function (which will be executed).

    Also, if you have 4, 6 or any higher even number of the same starting letter, you will count it more than you need.

  • Claudivan Barreto replied 6 years ago

    Deu certo. Vlw pela ajuda.

  • Matheus Leão replied 6 years ago

    claudvanbarret, o seu erro está nesse trecho:

    for(i=0;i<tam;  )
                if(aliteracao[i]==aliteracao[i+1]){
                    cont++;
                    while(aliteracao[i]==aliteracao[i+1])
                        i++;
                }
                else
                    i++;

    tam é o tamanho do texto completo, e não o tamanho do vetor aliteração

    Veja ainda que no while (aliteracao[i] == aliteracao[i+1]), você pode acessar termos que não existem ou que foram armazenados na iteração anterior se i for o limite máximo.

    Por exemplo, teste o seguinte caso de teste e observe: sss sss eee eee sss sss eee

  • Claudivan Barreto replied 6 years ago

    Por que deu W.A? Minhas saídas estão corretas.

    Problema resolvido!
  • Vitor Rocha replied 6 years ago

    Era isso mesmo, Christian. Muito obrigado! Problema resolvido.

1 of 2