Organizando idéais para construir um código

2 respostas
H

Ae galera, esse é meu primeiro post.
Eu sou bem novo em java, e estou tendo alguns problemas.
Estou estudando para a maratona de programação e me deparei com um problema do ano passado, não é um problema difícil, só estou tendo dificuldades de organizar as coisas que eu aprendi. Vou abreviar a questão aqui para vocês entenderem:

Bem o problema enrola e dá o seguinte exemplo: "…se a máquina apresenta falha no dígito 5, o valor 1500 seria datilografado no contrato como 100, pois o 5 não seria impresso."
Basicamente eu vou colocar um número, e se a sequência seguinte tiver este número, na saída vai haver algumas regras, a mais comum é este numero não aparecer, ele até dá uns exemplos de entrada e saída:

Entrada 5 5000000 3 123456 9 23454324543423 9 99999999991999999 7 777 0 0

Saída 0 12456 23454324543423 1 0 (aqui não aparece nada)

Bem pelo q eu percebi tem uma pegadinha, no caso do primeiro exemplo, se eu colocar 5, ele some com o 5 e os outros 0 se transformam só em um 0.
Ele também dá a seguinte informação: “Cada linha contém dois inteiros D e N (1 <= D <= 9; 1 <= N < 10^100), representando, respectivamente, o dígito que está apresentando problema na máquina e o número que foi negociado originalmente no contrato.” , ou seja, no D que é Digito, posso usar numeros de 1 a 9 e no N terei que utilizar ‘String’, pra suportar a cadeia de 1 a 10^100 caracteres. :!:

Pra quem tiver interesse de ver o problema na íntegra esse é o link do pdf: http://maratona.ime.usp.br/hist/2010/primeira-fase/maratona.pdf.
É o Problema A, Revisão de contrato.

Até agora só consegui meio q iniciar, mas ta osso, não tenho muita experiência… :frowning:

public static void main(String[] args) { Scanner scan = new Scanner(System.in); while (scan.hasNextLine()) { String[] line = scan.nextLine().split(" "); System.out.println(line[1].replaceAll(line[0], "")); } }

2 Respostas

rmendes08

O seu raciocínio está correto. Falta apenas converter o String final para inteiro.

Eu já participei da maratona, é uma competição muito legal, portanto, dou algumas dicas:

:arrow: acostume-se a escrever seus próprios casos de teste e desenvolva a partir deles. Eles são fundamentais para assegurar que você entendeu o enunciado do problema. Se você estiver utilizando o Linux é melhor ainda, pois fica mais fácil simular o ambiente da maratona: escreva as entradas em um arquivo, monte um arquivo com as saídas esperadas em um arquivo separado. Execute o programa usando o arquivo como entrada e um terceiro arquivo como saída. Por fim, compare a saída gerada com a saída esperada.

:arrow: utilize desenvolvimento top-down, escreva uma função que processa a entrada e devolva uma saída, devolva constantes antes de fazer a implementação real, coloque no laço, execute os testes, e vai implementando a função de forma que ela cubra cada vez mais os testes. Dê uma lida sobre TDD, você vai ver que ajuda muito.

H

Valeu rmendes08, eu revisei umas coisas e melhorei esse codigo!

Scanner scan = new Scanner(System.in); while (scan.hasNextLine()) { String[] line = scan.nextLine().split(" "); if (line[0].equals("0")) return; String s = line[1].replaceAll(line[0], "").replaceFirst("^0+", ""); System.out.println(s.equals("") ? "0" : s); }

Mas eu demorei muito pra fazer…
To mto preocupado com esse tempo, pois na maratona é 5h se não me engano :?

Criado 30 de abril de 2011
Ultima resposta 2 de mai. de 2011
Respostas 2
Participantes 2