TOPIC

PROBLEM 1278 - 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.

  • blublublu replied 5 years ago

    todas saídas batem e da PE o que está errado?

    Post duplicado
  • Matheus Leão replied 5 years ago

    É pra deixar uma linha entre os casos de testes, mas não depois do último :)

  • Unknown replied 4 years ago

    A descrição do problema diz:

  • Bruno Almeida Rabelo replied 4 years ago

    Meu programa está dando presentation error. Eis a saída: http://uploaddeimagens.com.br/imagens/captura_detela-2-png--37

    #include <stdio.h>
    #include <string.h>
    
    #define MAX_LIN 100     /* Máxima quantidade de linhas no texto. */
    #define MAX_T_LIN 52    /* Máximo tamanho de uma linha. */  
    #define VERDADE 1
    #define FALSO 0
    
    int rem_esp(char linha[]);
    void just_imp(char texto[][MAX_T_LIN], int marg_dir, int tam_txt);
    
    int main()
    {
        char texto[MAX_LIN][MAX_T_LIN];
        int q_linhas;
        int tam_lin, tam_txt;
        int marg_dir = 0;
    
        scanf("%d", &q_linhas);
        while (q_linhas != 0)
        {
            getchar();
            for (tam_txt = 0; tam_txt < q_linhas; tam_txt++)
            {
                fgets(texto[tam_txt], MAX_T_LIN, stdin);
                tam_lin = rem_esp(texto[tam_txt]);
                if (tam_lin > marg_dir) marg_dir = tam_lin;
            }
            just_imp(texto, marg_dir, tam_txt);
            marg_dir = 0;
            printf("\n");
            scanf("%d", &q_linhas);
        }
        return 0;
    }
    
    /*
     * Remove os espaços desnecessários da linha e calcula o seu tamanho.
     */
    int rem_esp(char linha[])
    {
        char aux[MAX_T_LIN];
        int tam_lin = strlen(linha);
        int i, j = 0;
        int p_let_lid = 0;  /* indica se a primeira letra já foi lida */
    
        if (linha[0] != ' ')
        {
            aux[j] = linha[0];
            p_let_lid = VERDADE;
            j++;
        }
        for (i = 1; i < tam_lin; i++)
        {
            if (linha[i] != ' '
                || (linha[i + 1] != ' ' && linha[i + 1] != '\n' 
                    && p_let_lid != FALSO))
            {
                aux[j] = linha[i];
                p_let_lid = VERDADE;
                j++;
            }
        }
        aux[j] = '\0';
        strcpy(linha, aux);
        return j;   /* j passa a ser o novo tamanho da linha */
    }
    
    /*
     * Justifica o texto à direita e o imprime.
     */
    void just_imp(char texto[][MAX_T_LIN], int marg_dir, int tam_txt)
    {
        int i, j;
        int q_esp = 0;  /* quantidade de espaços a ser impressa antes da linha */
    
        for (i = 0; i < tam_txt; i++)
        {
            q_esp = marg_dir - strlen(texto[i]);
            for (j = 0; j < q_esp; j++) putchar(' ');
            printf("%s", texto[i]);
        }
        return;
    }
  • Unknown replied 4 years ago

    Executei o código com o Exemplo de Entrada, e a saída não correspondeu ao Exemplo de Saída.

    Dúvida: qual objetivo dessas condições?

    ... && n!=0 && n >=0

    Dica: Em vez de usar setbuf, basta você incluir a quebra de linha, no padrão de leitura do scanf, quando a linha seguinte for lida por gets:

    scanf( "%d\n", &n )
  • Felipe Derkian replied 4 years ago

    estou recebendo PE e não sei mais o que fazer.. algum pode fazer um esquema para eu conseguir o codigo seja aceito.

    exemplo:

    ----------------inicio do programa------------------ 1----------------->quantidade de palavras maria ----->frase recebida pelo usuario maria"\n" ---->impressão do nome justificado; "\n" ----> quebra de linha pedido 2------------------>quantidade de palavras felipe------------>frase recebida pelo usuario ze----------------->frase recebida pelo usuario felipe"\n"--------->impressão do nome justificado; ze"\n"--------->impressão do nome justificado; "\n"----------------> quebra de linha pedido 0 ---------------fim do programa------------------

    MOD
  • Felipe Derkian replied 4 years ago

    accp

    MOD
  • Felipe Derkian replied 4 years ago

    estou recebendo 10% de erro... alguem pode me ajudar... já submeti umas 20 vezes e não entendo onde estou errando... se alguem puder dar alguma dica.. desde ja fico agradecido pela ajuda. -- comentei para terem noçao do que cada coisa se trata..

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main(){
    
        int n;
    
        while(scanf("%d",&n)&& n != 0){
                setbuf(stdin,NULL);
            char nome[n][100];
            int i,j;
            char Nome_corrigido[n][100];
            char aux[100];
            for(i=0;i<n;i++){
                gets(nome[i]);
                setbuf(stdin,NULL);
            }
      //-----------------------------------------
      // ver se tem espaco no primeiro caractere da frase
      int tam = 0;
            for(i=0;i<n;i++){
                if(nome[i][0]==' '){
                    strcpy(aux, nome[i]);
                    for(j=1;j<strlen(aux);j++){
                        aux[j-1] = aux[j];
                    }
                    aux[j-1]='\0';
                    strcpy(nome[i] , aux);
                }
            }
       //----------------------------------------
    //-------------------------------------------
    //faz a frase ficar apenas com os espaços necessarios
    int t =0;
    
            for(i=0;i<n;i++){
                    t=0;
                for(j=0;j<strlen(nome[i]);j++){
                    if(nome[i][j]!=' '){
                    aux[t] = nome[i][j];
                    t++;
                    }
                    else if(nome[i][j]==' ' && nome[i][j-1]!=' '){
                        aux[t] = nome[i][j];
                        t++;
                    }
                }
                aux[t]='\0';
                strcpy(Nome_corrigido[i],aux);
                strcpy(aux,"");
            }
    //----------------------------------------------------------
    //----------------------------------------------------------
    //pega o tamanho de cada frase para dar os espaços nos menores
            int vet_Tam_Nomes[n];
            //teste dos nomes corrigidos;
            for(i=0;i<n;i++){
              //  printf("%s \n",Nome_corrigido[i]);
                vet_Tam_Nomes[i]=strlen(Nome_corrigido[i]);
              //  printf("valor do tam %d = %d\n",i,vet_Tam_Nomes[i]);
            }
    //-------------------------------------------------------------------
    //------------------------------------------------------------------
    //corre o vetor dos tamanhos guardados para ver o maior deles
            int maior =vet_Tam_Nomes[0];
            for(i=1;i<n;i++){
                if(vet_Tam_Nomes[i] > maior){
                    maior = vet_Tam_Nomes[i];
                }
            }
    //--------------------------------------------------
    //imprime os resultador
            for(i=0;i<n;i++){
                for(j=0;j < maior-strlen(Nome_corrigido[i]);j++){
                    printf(" ");
                }
                printf("%s\n",Nome_corrigido[i]);
            }
    //-------------------------
    //print para a separação
            printf("\n");
        }
    
    }
    MOD
  • Felipe Derkian replied 4 years ago

    estou recebendo 10% de erro... alguem pode me ajudar... já submeti umas 20 vezes e não entendo onde estou errando... se alguem puder dar alguma dica.. desde ja fico agradecido pela ajuda. -- comentei para terem noçao do que cada coisa se trata..

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main(){
    
        int n;
    
        while(scanf("%d",&n)&& n != 0){
                setbuf(stdin,NULL);
            char nome[n][100];
            int i,j;
            char Nome_corrigido[n][100];
            char aux[100];
            for(i=0;i<n;i++){
                gets(nome[i]);
                setbuf(stdin,NULL);
            }
      //-----------------------------------------
      // ver se tem espaco no primeiro caractere da frase
      int tam = 0;
            for(i=0;i<n;i++){
                if(nome[i][0]==' '){
                    strcpy(aux, nome[i]);
                    for(j=1;j<strlen(aux);j++){
                        aux[j-1] = aux[j];
                    }
                    aux[j-1]='\0';
                    strcpy(nome[i] , aux);
                }
            }
       //----------------------------------------
    //-------------------------------------------
    //faz a frase ficar apenas com os espaços necessarios
    int t =0;
    
            for(i=0;i<n;i++){
                    t=0;
                for(j=0;j<strlen(nome[i]);j++){
                    if(nome[i][j]!=' '){
                    aux[t] = nome[i][j];
                    t++;
                    }
                    else if(nome[i][j]==' ' && nome[i][j-1]!=' '){
                        aux[t] = nome[i][j];
                        t++;
                    }
                }
                aux[t]='\0';
                strcpy(Nome_corrigido[i],aux);
                strcpy(aux,"");
            }
    //----------------------------------------------------------
    //----------------------------------------------------------
    //pega o tamanho de cada frase para dar os espaços nos menores
            int vet_Tam_Nomes[n];
            //teste dos nomes corrigidos;
            for(i=0;i<n;i++){
              //  printf("%s \n",Nome_corrigido[i]);
                vet_Tam_Nomes[i]=strlen(Nome_corrigido[i]);
              //  printf("valor do tam %d = %d\n",i,vet_Tam_Nomes[i]);
            }
    //-------------------------------------------------------------------
    //------------------------------------------------------------------
    //corre o vetor dos tamanhos guardados para ver o maior deles
            int maior =vet_Tam_Nomes[0];
            for(i=1;i<n;i++){
                if(vet_Tam_Nomes[i] > maior){
                    maior = vet_Tam_Nomes[i];
                }
            }
    //--------------------------------------------------
    //imprime os resultador
            for(i=0;i<n;i++){
                for(j=0;j < maior-strlen(Nome_corrigido[i]);j++){
                    printf(" ");
                }
                printf("%s\n",Nome_corrigido[i]);
            }
    //-------------------------
    //print para a separação
            printf("\n");
        }
    
    }
    MOD
  • lincoln replied 4 years ago

    Olá, no Problem 1278 - Justifier II, estou recebendo o seguinte enunciado:

    " URI Online Judge | 2378 Elevador

    Por OBI - Olimpíada Brasileira de Informática 2010 BR Brazil Timelimit: 1

    A Subindo Bem Confortavelmente (SBC) é uma empresa tradicional, com mais de 50 anos de experiência na fabricação de elevadores. Todos os projetos da SBC seguem as mais estritas normas de segurança, mas infelizmente uma série de acidentes com seus elevadores manchou a reputação da empresa.

    Ao estudar os acidentes, os engenheiros da companhia concluíram que, em vários casos, o acidente foi causado pelo excesso de passageiros no elevador. Por isso, a SBC decidiu fiscalizar com mais rigor o uso de seus elevadores: foi instalado um sensor em cada porta que detecta a quantidade de pessoas que saem e entram em cada andar do elevador. A SBC tem os registros do sensor de todo um dia de funcionamento do elevador (que sempre começa vazio). Eles sabem que as pessoas são educadas e sempre deixam todos os passageiros que irão sair em um andar saírem antes de outros passageiros entrarem no elevador, mas ainda assim eles têm tido dificuldade em decidir se a capacidade máxima do elevador foi excedida ou não.

    Sua tarefa é escrever um programa que, dada uma sequência de leituras do sensor e a capacidade máxima do elevador, determinar se a capacidade máxima do elevador foi excedida em algum momento. Entrada

    A primeira linha da entrada contém dois inteiros N e C, indicando o número de leituras realizadas pelo sensor e a capacidade máxima do elevador, respectivamente (1 ≤ N ≤ 1000 e 1 ≤ C ≤ 1000). As N linhas seguintes contém, cada uma, uma leitura do sensor. Cada uma dessas linhas contém dois inteiros S e E, indicando quantas pessoas saíram e quantas pessoas entraram naquele andar, respectivamente (0 ≤ S ≤ 1000 e 0 ≤ E ≤ 1000). Saída

    Seu programa deve imprimir uma uníca linha contendo o caractere ‘S’, caso a capacidade do elevador tenha sido excedida em algum momento, ou o caractere ‘N’ caso contrário."

    Por favor, como recebo o enunciado corretamente?

  • Aminul Islam Mamun replied 4 years ago

    After trying a lot getting presentation error. :(

    Accepted
  • Caio Tácito Borges da Costa replied 5 years ago

    Presentention Error, alguém me ajuda??

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    int main(){
    
    vector<string> vetor,certo;
    int n,maior;
    bool prim=true;
    while(true){
            cin>>n;
            if(n==0)
                break;
    if(!prim)
    cout<<endl;
    prim=false;
    
    getchar();
    maior=-9999;
    for(int i=0;i<n;i++){
        string x;
        getline(cin,x);
        vetor.push_back(x);
    }
    
    for(int j=0;j<n;j++){
    string x=vetor[j],y;
    for(int i=0;i<x.length();i++){
    if(isalpha(x[i])){
        y+=x[i];
    
    }else if(x[i]==' ' && x[i-1]!=' ')
    y+=' ';
    if(y[0]==' ')
    y.erase(0,1);
    
    }
    if(y[y.length()-1]==' ')
    y.erase(y.length()-1,1);
    certo.push_back(y);
    y.clear();
    
    }
    //for(int i=0;i<certo.size();i++) cout<<certo[i]<<"zzz"<<endl;
    
    for(int i=0;i<certo.size();i++){
    string x;int mht;
    x=certo[i];
    mht=x.length();
    if(mht>maior)
        maior=mht;
    
    }
    for(int i=0;i<certo.size();i++){
        while(certo[i].length()<maior)
            certo[i].insert(0," ");
    
    }
    for(int i=0;i<certo.size();i++) cout<<certo[i]<<endl;
    
    vetor.clear();
    certo.clear();
    
    cout<<endl;
    }
    //for(int i=0;i<vetor.size();i++) cout<<vetor[i]<<endl;
     return(0);
    
    }
  • Matheus Leão replied 5 years ago

    blublulbu, teste este caso, trocando os * por espaços. Teste e deu errado aqui.

    3
    ***ROME*AND***
    JULIET*WERE*
    IN*LOVE*
  • blublublu replied 5 years ago

    E agora Matheus oque esta errado por favor?

    #include<iostream>
    #include<string.h>
    
    using namespace std;
    
    class bloco
    {
     public:
     string palavra;
     int tamanho;     
    };
    
    int main()
    {
     int n,i,maior,tam,k,j,spaco,cont = 1;
     bloco *b;
     string str,aux;
     cin>>n;
         while(n>0)
         {     
           if(cont!=1)
             cout<<endl;
            cin.ignore();          
          b = new bloco[n]; 
           maior = -1;
          for(i=0;i<n;i++)
          {                
                   getline(cin,str);
                   k = 1;          
                   aux = "";
                   j=0;
                   while(j!=str.size())
                   {                                                  
                        if(k==1)
                        {
                                if(str[j]==' ')
                                {    
                                         while(j<str.size() && str[j]==' ')
                                         {                                                              
                                          j++;                                    
                                         }
                                 } 
                                 k=0;     
                        } 
                        else
                        {
                                 if(str[j]!=' ')
                                 {
                                   aux+=str[j];                         
                                   j++;            
                                 }  
                                 else
                                 {                                                             
                                         while(j<str.size() && str[j]==' ')
                                         {                                                                                
                                          j++;               
                                         } 
                                         if(j<str.size() && aux[j]!=' ')
                                         {
                                           aux+=' ';             
                                         }                           
                                 }
                        }                                   
                   } 
                  b[i].palavra = aux;
                  b[i].tamanho = aux.size();                                              
                  if(b[i].tamanho > maior)
                  {
                   maior = b[i].tamanho;               
                  }     
          }     
    
          for(i=0;i<n;i++)
          {           
                spaco = maior - b[i].tamanho;
                for(j=0;j<spaco;j++)
                {
                 cout<<" ";                   
                }          
                cout<<b[i].palavra<<endl;   
          }
          cin>>n; 
          cont = 2;         
         }
     return 0;   
    }
  • Diego 2.0 replied 5 years ago

    Matheus, obrigado me ajudou a achar o erro =)!

  • Matheus Leão replied 5 years ago

    O primeiro caso de teste falha. Observa que é:

    3
    *****ROMEO******AND
    ******JULIET*WERE**
    ********IN*LOVE****

    Onde os * são espaços

  • Diego 2.0 replied 5 years ago

    Pessoal estou recebendo PE, eu até sei o motivo, alguém pode me ajudar a solucionar ?? Obrigado desde já =]

    AC :D
  • Matheus Leão replied 6 years ago

    O system pause não vai dar certo aqui. Outra coisa, testei para o primeiro caso e deu errado, dá uma checada. Observa que tem um espaços no fim das frases, e que não deve ter nenhum espaço no fim da sua frase.

  • blublublu replied 6 years ago

    Meu código esta dando PE,mas todas as saídas estão corretas alguém pode dizer o que tá errado no meu código.

    #include<iostream>
    #include<stdlib.h>
    #include<string.h>
    
    using namespace std;
    
    class bloco
    {
     public:
     string palavra;
     int tamanho;     
    };
    
    int main()
    {
     int n,i,maior,tam,k,j,spaco,cont = 1;
     bloco *b;
     string str,aux;
     cin>>n;
         while(n!=0)
         {     
            cin.ignore();          
          b = new bloco[n]; 
           maior = -1;
          for(i=0;i<n;i++)
          {                
                   getline(cin,str);
                   k = 1;          
                   aux = "";
                   j=0;
                   while(j!=str.size())
                   {                                                  
                        if(k==1)
                        {
                                if(str[j]==' ')
                                {    
                                         while(j!=str.size() && str[j]==' ')
                                         {                                                              
                                          j++;                                    
                                         }
                                 } 
                                 k=0;     
                        } 
                        else
                        {
                                 if(str[j]!=' ')
                                 {
                                   aux+=str[j];                         
                                   j++;            
                                 }  
                                 else
                                 {      
                                         aux+=' ';                    
                                         while(j!=str.size() && str[j]==' ')
                                         {                                                                                
                                          j++;               
                                         }                            
                                 }
                        }                                   
                   } 
                  b[i].palavra = aux;
                  b[i].tamanho = aux.size();                                              
                  if(b[i].tamanho > maior)
                  {
                   maior = b[i].tamanho;               
                  }     
          }  
            if(cont!=1)
             cout<<endl;
    
          for(i=0;i<n;i++)
          {           
                spaco = maior - b[i].tamanho;
                for(j=0;j<spaco;j++)
                {
                 cout<<" ";                   
                }          
                cout<<b[i].palavra<<endl;   
          }
          cin>>n; 
          cont = 2;         
         }
     system("pause>0");
     return 0;
    }
  • Miguel Araújo replied 6 years ago

    Olá, estou levando PE nesta questão, mas tenho quase certeza que meu código está correto. A saída-exemplo desta questão no URI está errada. Alguém pode confirmar? Grato pela ajuda! :) Se eu estiver enganado, então alguém sabe o erro no meu código?

    CÓDIGO REMOVIDO

    Resolvi o problema

1 of 2