TOPIC
PROBLEM 1192 - URI Fórum 1.0
This topic was solved and cannot recieve new replies.
-
hacneto replied on May 6 2013
olá, gostaria de avisar que esta pergunta 1192 esta confundindo bastante quem for faze-la, porque eu acho que tem um problema na seguinte frase: Se a letra for maiúscula, deve-se subtrair o primeiro dígito do segundo. Porem se você olhar o exemplo 4-5=1, não era pra ser 4-5=-1? Exemplo de Entrada
3 4A5 2G4 7Z1
Exemplo de Saída
1 2 -6
entao eu acho que a frase deveria ser: Se a letra for maiúscula, deve-se subtrair o segundo dígito do primeiro. ou seja, ao invez de ser 4-5 é para ser 5-4, você inverte as variaveis lidas para fazer o calculo de subtração. Eu peço desculpas se eu estiver errado, mas é só pra alertar quem estiver pensando assim como eu. Obrigado pela atenção.
-
willer1 replied 7 years ago
Boa noite.
acredito que tem um pequeno problema no caso 4f2 no udebug o resultado é 6 e um espaço na frente.
Obrigado.
-
maragao replied 8 years ago
Se seu código está em C++, a biblioteca deve ser adicionada ao código como . A estrada não cita que há espaço dentre aos números e a letra.
-
antunius replied 8 years ago
Recebi WA
#include <iostream> #include <cctype> #include <algorithm> #include <stdio.h> using namespace std; int main() { int n; int numa,numb,resultado; scanf("%i",&n); char letra[n]; for (int i = 0; i < n;i++) { scanf("%i %c %i",&numa,&letra[i],&numb); if (numa==numb) { printf("%i\n",numa*numb); }else{ if ((isupper(letra[i]))&&(numa<numb)) { printf("%i\n",abs(numa-numb)); }else{ if ((isupper(letra[i]))&&(numa>numb)) { printf("%i\n",numb-numa); }else{ if (islower(letra[i])) { printf("%i\n",numa+numb); } } } } } return 0; }
-
lsscaravelli replied 8 years ago
Fala galera,
Meu código esta dando 40% wrong, porém não consegui identificar o erro, todos os testes estão dando certo.
#include <stdio.h> #include <math.h> #include <ctype.h> int main(){ int testes,numero1,numero2; char digito; scanf("%i",&testes); for(;testes>0;testes--){ scanf("%i%c%i",&numero1,&digito,&numero2); getchar(); if(numero1==numero2) printf("%i\n",numero1*numero2); else if(isupper(digito)) printf("%i\n",numero2-numero1); else if(islower(digito)) printf("%i\n",numero1+numero2); } return 0; }
-
jaafilho replied 9 years ago
Não acho o erro do meu código, porém da WA 100%:
RESOLVIDO!
Obs.: O vetor de caracteres deve ter no mínimo 4 posições, mesmo que só receba 4 caracteres.
-
thorhent replied 9 years ago
O meu código em Java passou. Para diminuir o tempo dá para fazer três coisas:
- usar o estilo de entrada indicado pelo URI (classes InputStreamReader e BufferedReader)
- usar o método split.
- usar o método matches.
-
crbonilha replied on Mar 15 2014
O seu algoritmo falha quando os dois dígitos são iguais e a letra é minúscula. Certifique-se de colocar a terceira condição dentro de um else if.
5a5
-
mvrocha replied on Mar 15 2014
Por favor, o codigo abaixo está recebendo wrong answer, seria possível comentar algo sobre. Sem mais. Obrigado.
/*Programa para ler uma sequência de caracteres e realizar a seguinte operação:*/ /*Se a letra for maiúscula, deve-se subtrair o primeiro dígito do segundo;*/ /*Se a letra for minúscula, deve-se somar ambos os dígitos;*/ /*Se os DÍGITOS forem iguais, deve-se desconsiderar a letra e mostrar o produto*/ /*entre os dois dígitos.*/ #include <stdio.h> #define MAX_STR 4 int main(){ char seq[MAX_STR]; int i; int n; int res; i = 0; res = 0; scanf("%d",&n); for(i = 0; i < n; i++){ scanf("%s",seq); seq[0] = seq[0] - 48; /*Converte caracter (digito) para decimal*/ seq[2] = seq[2] - 48; if(seq[0] == seq[2]) /*Verifica digitos iguais*/ res = seq[0] * seq[2]; else if(seq[1] >= 65 && seq[1] <= 90) /*Verifica caracter maiusculo*/ res = seq[2] - seq[0]; if(seq[1] >= 97 && seq[1] <= 122) /*Verifica caracter minusculo*/ res = seq[2] + seq[0]; printf("%d\n",res); } return 0; /*Retorna que o programa foi executado normalmente*/ }
-
aluiz1 replied on Feb 5 2014
Tem razão. Recebi o Accepted agora. Nunca mais cometerei esse erro denovo rsrs.....obg =)
-
ggroth replied on Feb 4 2014
O teu TLE não é derivado da simplicidade ou não do teu código, mas de ficar em um laço infinito. Teu código só irá encerrar, se o n for igual a zero, mas isso nunca irá ocorrer devido às especificações do problema.
-
aluiz1 replied on Feb 4 2014
Gostaria de saber por qual motivo estou levando um Time Limit Exceeded =/.... estou usando C++ e esta bem simples o codigo,acho que nao consigo simplicar mais que isso rsrs....agradeço a ajuda de todos =)...
#include <iostream> #include <iomanip> #include <string.h> #include <math.h> #include <list> #include <map> #include <sstream> #include <stdio.h> #include <cstring> using namespace std; int main() { int n1,n2,r,n; char c; while(1){ cin >> n; if (n==0) break; for (int i =0;i<n;i++){ cin >> n1 >> c >> n2; if (n1==n2) r = n1*n2; else if (c>=45 && c <=90) r = n2-n1; else if (c>=97 && c <=122) r = n1+n2; cout << r << endl;} } return 0; }
-
crbonilha replied on Dec 1 2013
Na verdade seria:
t[i]-'0';
E nem precisa de um for. Você sabe onde estão os números?
É um padrão -> 5A5 (número)(letra)(número)
Então os números estão na primeira posição e na terceira. Lembre-se que em vetores a contagem inicia em 0.
-
EstudandoJava replied on Dec 1 2013
boa tarde... estou tentando converter a string pra inteiro mas nao esta funcionando, algum pode me ajudar?
#include<stdio.h> #include<string.h> main(){ int i=0,b=0,x=0; char t[4],a=0; scanf("%s",&t); for(i=0;t[i]='\0';i++) { if(i==0)a=t[i-'0']; } printf("%i\n",a); }
-
crbonilha replied on Nov 30 2013
Veja bem, há uma diferença entre fazer operações com caracteres e com números. Por exemplo:
char letra = '5'; int n = 5; printf("%d %d\n", n+n, (int)letra+letra);
O resultado será "10 106". Porquê?
Porque estou somando o valor do caractere 5, e não o dígito decimal 5. Se você olhar na tabela ASCII (http://www.asciitable.com/), o caractere 5 vale 53, e não 5.
O primeiro passo, então, será converter o caractere 5 para um inteiro. Podemos fazer isso assim:
char letra = '5'; int n; n = letra - '0';
Olhando na tabela, vemos que o caractere 5 vale 53, e o caractere 0 vale 48.
53 - 48 = 5
-
Lagoa0 replied on Nov 19 2013
Não entendo pq não estou conseguindo soma se a letra do meio é minuscula só estou errando nessa parte.
#include<stdio.h> #include<ctype.h> #include<stdlib.h> int main(){ char A[4]; int N,b,sub,add; scanf("%d",&N); while(N--) { scanf("%s",&A); if(A[0]==A[2]) { b=atoi(A); b=b*b; printf("%d\n",b); } else { if(tolower(A[1])==A[1]) { add=A[2]+A[0]; printf("%d\n",add); } if(toupper(A[1])==A[1]) { sub=A[2]-A[0]; printf("%d\n",sub); } } } }
-
NeilorTonin-beecrowd replied on Sep 8 2013
Olá Pessoal,
Existem várias formas de entrada no Java (acredito que a forma com Scanner é a mais lenta) e o tamanho da entrada é razoável, acaba dando TLE.
Para amenizar, eu aumentei o TL deste problema para 2 segundos. Posteriormente poderemos ter TL diferentes de acordo com a linguagem.
-
_WHR_0 replied on Aug 28 2013
Olá, obrigado pela sua resposta. Na verdade não escolhi JAVA como linguagem "principal" para resolver os problemas, na verdade a maioria (99%) dos problemas que resolvi foi em C++, porém por gostar de JAVA decidi fazer uns para ver como é. Só postei aqui pois achei muito estranho, resolvi o problema 1241 que ao meu ver exige muito mais processamento do que este, e não deu TLE.
Problema: 1241 - Encaixa ou Não II Resposta: Accepted Linguagem: Java Runtime: 0.480s Submissão: 26/08/2013 - 16:41:21
Mesmo assim, obrigado pela resposta! Grande abraço.