TOPIC
PROBLEM 1197 - URI Fórum 1.0
This topic was solved and cannot recieve new replies.
-
cbolopes0 replied 8 years ago
Pessoal, eu sou professor de computação (engenheiro de computação) e verifiquei uma inconsistência nessa questão. A solução apresentada por ela (URI) que pode ser observada pelo toolkit e exemplos utilizam de execução do programa, no diz que resposta utiliza o conceito de movimento uniforme - MU (S = So + VT). No entanto, no enunciado é informado que temos um aceleração constante. E em momento algum do problema é informado que ao atingir a velocidade no dado tempo a aceleração irá para zero, indicando que a velocidade dada será uma velocidade média podendo realizar a seguinte operação: VT2; "que é a solução sugerida pelo URI dado as características de execução fornecidas pelo toolkit".
Bem, sugiro que mudem a descrição desse problema porque a sua solução esta apresentando um erro de física muito grave. Pois, a solução deveria utilizar o conceito de movimento uniformemente variado - MUV, ou seja: * S = So + VoT + (1/2)a(t^2) V = Vo + aT;**
e como o problema na fornece a (aceleração) e nem Vo (velocidade inicial) não tem como solucionar esse problema apresentado um valor numérico.
-
Roberto0 replied on Feb 24 2014
Se estiver falando de Java,
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String line = null; while ((line = in.readLine()) != null) { // Algo aqui... }
Abraços.
-
vdalsasso replied 8 years ago
Experimente digitar o seguinte caso de teste no código que estava dando errado:
-1 10
O programa encerra logo ao digitar o -1, não é?
O problema no seu código era que EOF vale -1 (geralmente, parece que esse valor pode variar dependendo do sistema operacional), e caso em uma iteração o valor da variável v seja -1, o programa terminava, enquanto deveria continuar até que não houvesse entrada.
-
lcury1 replied 8 years ago
Boa tarde, Vinícius. Sua proposta de fato resolveu o problemam, obrigado. No entanto não entendi um detalhe, a função scanf retorna um valor inteiro indicando a quantidade de parâmetros efetivamente lidos. Neste caso, a função não leria qualquer parâmentro, retornando, portanto o valor 0, mas acredito que o valor de EOF não seja 0, baseado em tudo que já li.
-
vdalsasso replied 8 years ago
O problema não está no cálculo, mas na condição da parada (Uma variável não assume um valor "EOF", o EOF serve para verificar se ocorreu a entrada). Coloque o scanf da variável v dentro da comparação do while que irá funcionar.
while (scanf("%d", &v)!=EOF){
-
lcury1 replied 8 years ago
Usando o toolkit, não achei qualquer caso de teste que não batesse que o resultado pedido. Por favor, poderiam me mostrar onde está o erro no código abaixo?
/* URI 1197 */ #include <stdio.h> int main(){ int v, t; scanf("%d", &v); while (v!=EOF){ scanf("%d", &t); printf("%d\n", 2*v*t); scanf("%d", &v); } return 0; }
-
lvinicius4 replied 9 years ago
Esse problema não pode ser resolvido sem saber o valor da aceleração. Pelo que eu vi aqui nos tópicos a galera resolveu usando velocidade constante, que existe se, e somente se a aceleração for diferente de zero. A aceleração vale zero mesmo? Se sim, sugiro uma correção no enunciado do problema.
-
JulienSoren replied 9 years ago
Alguém me explica porquê aqui dá Possible RunTime Error
import java.util.Scanner; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { try { Scanner s = new Scanner(System.in); int v; int t ; int d; while (s.hasNext()) { v = s.nextInt(); t = s.nextInt(); d = (int) ( (1.0 / 2) * v * t * 4 ); System.out.printf("%d\n", d); } s.close(); } catch (Exception e) { } } }
E porquê aqui não dá ?
import java.util.Scanner; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { try { Scanner s = new Scanner(System.in); int v; int t ; int d; while (s.hasNext()) { v = s.nextInt(); t = s.nextInt(); d = (int) ( 0.5 * v * t * 4 ); System.out.printf("%d\n", d); } s.close(); } catch (Exception e) { } } }
-
casierra replied 9 years ago
Good day. I have a problem, and i hope you can help me. I have this code in java, but when it's execute the answer is: Time limit exceeded. I analyze the code and think that the problem is the EOF finish condition. Please, help me with this trouble. Thanks a lot.
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out)); try { String line; String[] number; int x, y, value; while((line = br.readLine()) != null) { number = line.split(" "); x = Integer.parseInt(number[0]); y = Integer.parseInt(number[1]); value = x * y * 2; log.write(value + "\n"); log.flush(); } } catch(Exception ex) {} } }
-
vribeiro replied 9 years ago
Olá! Mesmo com a alteração sugerida por vc, ainda está dando TLE...[/quote]
Olá nessa, Mil perdões pela minha falta de atenção! O enunciado diz que "O final da entrada é determinado por EOF."
Para isso, você deve colocar uma condição em seu laço while para o programa parar. Como você não tem essa condição, o while vai rodar sempre.
Tente colocar:
while(scanf("%d %d", &t, &v) != EOF){
================================================================================= Ok! Sem problemas, eu que sou grata pela ajuda!!! Agora foi aceito! Muita Obrigada!!! ^_^
-
Lekzinn replied 9 years ago
Olá nessa, Mil perdões pela minha falta de atenção! O enunciado diz que "O final da entrada é determinado por EOF."
Para isso, você deve colocar uma condição em seu laço while para o programa parar. Como você não tem essa condição, o while vai rodar sempre.
Tente colocar:
while(scanf("%d %d", &t, &v) != EOF){
-
Lekzinn replied 9 years ago
Que estranho... a complexidade deste algoritmo não deveria dar TLE oO Tente o seguinte:
Ao invés de atribuir um resultado a variável X, imprima o resultado direto
printf("%d\n", (v * t)*2);
Att,
-
vribeiro replied 9 years ago
Olá! Alguém pode me ajudar?
O meu código está dando Time limit exceeded:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int t, v, x; while(scanf("%d %d", &t, &v)){ x = (v * t)*2; printf("%d\n", x); } system("PAUSE"); return 0; }
Desde já, muito obrigada!
-
gmendonca0 replied on Mar 28 2014
O que tem de errado no meu código?
#include<iostream> #include<cstdio> using namespace std; int main(){ int v,t,x; while(v!=EOF and t!=EOF){ cin >> v >> t; x = (v*t)*2; cout << x << endl; } }