TEMA
PROBLEM 1278 - URI Fórum 1.0
Este tema fue resuelto y no puede recibir nuevas respuestas.
-
mleao1 respondido 8 years ago
É pra deixar uma linha entre os casos de testes, mas não depois do último :)
-
barabelo respondido 7 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; }
-
FelipeDerkian respondido 7 years ago
MODestou 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------------------
-
FelipeDerkian respondido 7 years ago
MODestou 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"); } }
-
FelipeDerkian respondido 7 years ago
MODestou 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"); } }
-
lincoln7 respondido 7 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?
-
ctbdcosta respondido 8 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); }
-
mleao1 respondido 9 years ago
blublulbu, teste este caso, trocando os * por espaços. Teste e deu errado aqui.
3 ***ROME*AND*** JULIET*WERE* IN*LOVE*
-
blublublu respondido 9 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; }
-
mleao1 respondido 9 years ago
O primeiro caso de teste falha. Observa que é:
3 *****ROMEO******AND ******JULIET*WERE** ********IN*LOVE****
Onde os * são espaços
-
mleao1 respondido 9 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 respondido 9 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; }
-
MiguelAraujo respondido 9 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
-
mleao1 respondido 9 years ago
Testem com espaços no fim das frases.
Pedro, teste uma entrada com exatamente um espaço extra no fim da última frase.
-
MiguelAraujo respondido 9 years ago
#include <iostream> #include <vector> #include <cstring> using namespace std; int main() { int n, size, max, dif; string s; bool check; char c; while(cin >> n) { cin.ignore(); max = 0; vector<string> v; vector<string> v_final; int len[n]; int len_final[n]; for (int i = 0; i < n; ++i) { getline(cin, s); v.push_back(s); size = s.length(); len[i] = size; } for (int i = 0; i < n; ++i) { string final; check = false; s = v[i]; size = s.length(); for (int j = 0; j < size; ++j) { if(s[j] != ' '){ c = s[j]; final += c; check = true; }else{ if(check){ final += ' '; check = false; } } } size = final.length(); len_final[i] = size; v_final.push_back(final); if(max < size) max = size; } for (int i = 0; i < n; ++i) { dif = max - len_final[i]; for (int j = 0; j < dif; ++j) cout << " "; cout << v_final[i] << endl; } cout << endl; } return 0; }
Galera, estou recebendo Presentation Error com este código, mas eu não consigo achar a diferença na impressão da saída. Fiz alguns casos de teste e batem com o toolkit.
-
ph1000 respondido 9 years ago
galera testei de varias formas e esta dando presentation error , alguem me ajuda =|
#include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> int main(){ int i,a,x,p,max,aux,k,l,j,vetor[1000]; char str[200],vet[10000]; j = 0; while(1) { scanf("%d",&i); if(i==0)break; x=0; aux = 0; p=0; max = 0; while(i--) { getchar(); scanf("%[^\n]",str); a = 0; while(str[a]==' ')a++; while(str[a]!='\0') { //if(str[a]==' '&& str[a+1]==' '){ //a++; //continue; //} if(str[a]!=' ' && str[a+1]==' ' && str[a+2]==' ') { vet[x]=str[a]; a++; x++; while(str[a]==' ' && str[a]!='\0') { a++; } if(str[a]!='\0')a--; else break; } vet[x]=str[a]; a++; x++; } vet[x]='^'; vetor[p]=x-aux; if(x-aux>max)max = x-aux; p++; x++; aux = x; } if(j!=0)printf("\n"); vet[x-1]='}'; //for(a=0;a<p;a++)printf("%d\n",vetor[a]); k=max-vetor[0]; //printf("max = %d\nk = %d\ndiferença=%d\n",max,k,max-vet[0]); k = abs(k); while(k--)printf(" "); l = 1; for(a = 0;a<x;a++) { if(vet[a]=='^'){ printf("\n"); k=max-vetor[l]; k = abs(k); l++; while(k--)printf(" "); } else if(vet[a]=='}')printf("\n"); else printf("%c",vet[a]); } j =1; } return 0; }
-
crbonilha respondido on ago 19 2013
Isso não chega a fazer diferença. Desde que todas as respostas sejam impressas (seja no começo ou no final do seu algoritmo), ele está correto.