TOPIC

PROBLEM 1249 - URI Fórum 1.0

URI Online Judge asked 6 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Eduardo Cassiano replied 5 years ago

    Presentation Error? Já conferir as respostas e tudo esta ok! Será que também estou fazendo a leitura incorretamente? Faço assim:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    int main(){
    
            int i, tam, letra;
            char msg[50];
            while (scanf(" %[^\n]s",msg) !=EOF){
    
                    tam = strlen(msg);
                    for(i = 0; i < tam; i++){
                         /*Mágica do problema*/
                    }
                    printf("%s\n",msg);
            }
            return 0;
    }
  • Matheus Leão replied 5 years ago

    Tenta aumentar o tamanho da string. A frase termina com '\0', então precisa de mais posições. Declara pelo menos 55 por segurança.

  • Unknown replied 3 years ago

    Galera, preciso de ajuda, está dando Time limit exceeded, alguma dica?

    resolvido! :)
  • Stéfanni Brasil da Silva replied 3 years ago

    Pessoal, alguma ideia do erro aqui? Faço os testes e dá 100% WA quando submeto!

    #include <stdio.h>
    #include <string.h>
    
    int main() {
      char vetor1[100];
      int j = 0, tam = 0, i =0;
      scanf("%[^\n]%*c", vetor1);
        tam = strlen(vetor1);
          for(i = 0; i < tam; i++){
            if (vetor1[i] == '\0')
                  break;
              if(vetor1[i]  >= 'a' && vetor1[i]  <= 'z'){
                  if((vetor1[i] + 13) > 127 || (vetor1[i] + 13 > 122)){
                    vetor1[i] = vetor1[i] - 26;
                  }
                  vetor1[i] = vetor1[i] + 13;
              }
    
              if(vetor1[i]  >= 'A' && vetor1[i]  <= 'Z'){
                  vetor1[i] = vetor1[i] + 13;
                  if(vetor1[i] > 90)
                    vetor1[i] = vetor1[i] - 26;
            }
          }
            printf("%s\n", vetor1);
      return 0;
    }
  • Gabriel Morais Barbosa replied 3 years ago

    Alguém sabe me dizer porque estou recebendo 50% de resposta errada? Para todos os exemplos de entrada o meu código responde corretamente.

    RESOLVIDO

    Código corrigido.

    Obrigado

  • Vinicius Dalsasso replied 4 years ago

    Mude seu gets para != NULL. A verificação de final de arquivo com != EOF só funciona para variáveis, para strings use != NULL.

  • Willian Santos replied 4 years ago

    Olá, estou com problema de Time Limit Exceeded com o seguinte código e não sei como resolver:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    main(){
        char string1[60];
        int i, tam;
        while(gets(string1) != EOF){
            char string2[60];
            tam = strlen(string1);
            for(i = 0 ; i < tam ; i++){
                if(string1[i] >= 'a' && string1[i] <= 'z'){
                    if(string1[i] > 'z' - 13){
                        string2[i] = string1[i] - 13;
                    } else {
                        string2[i] = string1[i] + 13;
                    }
                } else {
                    if(string1[i] >= 'A' && string1[i] <= 'Z'){
                        if(string1[i] > 'Z' - 13){
                            string2[i] = string1[i] - 13;
                        } else {
                            string2[i] = string1[i] + 13;
                        }
                    } else {
                        string2[i] = string1[i];
                    }
                }
            }
            string2[i] = '\0';
            puts(string2);
        }
    }

    Se alguém puder me ajudar, agradeço! :)

  • Matheus Leão replied 4 years ago

    Matheus, declare um vetor maior (a string termina com '\0'). Coloque pelo menos +5 que o limite por segurança. Além disso, o compilador pode entender esse trecho diferente. Coloque parênteses nos &&s:

    if( (frase[i]>='a' && frase[i]<='m') || (frase[i]>='A' && frase[i]<='M')  )
                    frase[i]=frase[i]+13;

    Santiago, as letras minúsculas na tabela ASCII vão de 65 a 90 (e não de 64 a 90).

  • Santiago Soares replied 4 years ago

    Por que quando leio uma letra como w e z, por exemplo, imprime ä e ç?? Já tentei de tudo para arrumar mas não consegui!

    #include <stdio.h>
    #include <string.h>
    
    int main(){
        int a,b,d;
        char c;
        while(scanf("%c",&c)!=EOF){
            if(c>=97 && c<=122){
                c+=13;
                if(c>122){
                    c=c-122;
                                    c=c+97;
                }   
            } 
    
            else if(c>=64 && c<=90){
                c+=13;
                if(c>90){
                    a=c-90;
                    c=64+a;
                }  
            }
            if(c!=10) printf("%c",c);
            else printf("\n");
        }
    
        }
  • Mateus Azevedo Felix de OLiveira replied 4 years ago

    gostaria de saber qual o motivo do runtime error!! Todas as saídas estão como a do Toolkit. Agradeço desde já!!

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char *argv[]) {
        char frase[50];
        int aux,i;
    
        while(gets(frase)!=EOF){
            aux=strlen(frase);
            for(i=0;i<aux;i++){
                if(frase[i]>='a' && frase[i]<='m' || frase[i]>='A' && frase[i]<='M'  )
                    frase[i]=frase[i]+13;
    
                else{
                    if( frase[i]>='n' && frase[i]<='z' || frase[i]>='N' && frase[i]<='Z')
                    frase[i]=frase[i]-13;   
                }
            }
            printf("%s\n",frase);       
    
        }
        return 0;
    }
  • Cristhian Bonilha replied 4 years ago

    Você está alterando a variável x, e nas iteracões seguintes usando-a como se ela tivesse o valor original. Tente resetar o valor de x para 13 a cada iteracão.

  • Roger Benet replied 4 years ago

    Código Aceito.

  • Rafael_Cavalieri replied 4 years ago

    Obrigado, agora foi!

  • Wyllian Brito replied 4 years ago

    Vc precisa consertar algumas coisas no seu codigo: 1) a variavel i deve ser inteiro e não char. 2) Evite ficar verificando o tamanho da string o tempo todo, a função strlen é O(n). Calcule o tamanho da string apenas uma vez em uma variavel.

    for(i=0;i<strlen(msg);i++)

    Substitua por:

    int sz = strlen(msg);
    for(i=0;i<sz;i++)

    3) O TLE pelo q pude perceber está ocorrendo por causa disso "if(msg[0]==EOF)". Troque esse trecho:

    while (1)
        {
            fflush(stdin);
            gets(msg);
    
            if(msg[0]==EOF)
              break; 
    ....

    Por isso:

    while (gets(msg)){
    ....
  • Rafael_Cavalieri replied 4 years ago

    Pessoal ta dando Time Limit .. alguém pode me ajudar a diminuir esse tempo?

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    int main()
    {
        char msg[52], cod[52], i;
    
        while (1)
        {
            fflush(stdin);
            gets(msg);
    
            if(msg[0]==EOF)
              break; 
    
            for(i=0;i<strlen(msg);i++)
            {
               if(isalpha(msg[i]))
               {
                  if(!isalpha(msg[i]+13) || (isupper(msg[i]) && msg[i]+13 > 90))
                     msg[i]-=13;
                   else
                     msg[i]+=13;
                   cod[i]=msg[i];
               }
               else
                  cod[i]=msg[i];
            }
            cod[i]='\0';
            printf("%s\n", cod);
        }
        return 0;
    }
  • Matheus Leão replied 4 years ago

    Nesse caso, acho que é mais simples usar gets (lê a linha e descarta o '\0'), mas usando scanf eu costumo colocar um "%c" no fim da leitura. O quer dizer que é lido, mas descarta. O espaço deve funcionar também, mas de qualquer forma, tente gets :)

  • Eduardo Cassiano replied 4 years ago

    O problema é que esse espaço (_) é a maneira que faço para o scanf ignorar o "buffer". Se não me engano já obtive erros de compilação com o fflush(stdin) e o __fpurge(stdin). Qual é a maneira correta de limpar o buffer no compilador do URI?

  • Matheus Leão replied 5 years ago

    Tenta tirar o espaço do scanf("_%s"). Se também não der certo, deve ter mais algum detalhe na parte que você não postou.

  • Eduardo Cassiano replied 5 years ago

    Acabei de atribuir... e infelizmente não funcionou.Presentation Error novamente.

  • Han replied 5 years ago

    Vlw groth, era isso mesmo, AC :)

1 of 2