Cofrinhos da Vó Vitória Vó Vitória mantém, desde o nascimento dos netos Joãozinho e Zezinho, um ritual que faz a alegria dos meninos. Ela guarda todas as moedas recebidas como troco em dois pequenos cofrinhos, um para cada neto. Quando um dos cofrinhos fica cheio, ela chama os dois netos para um alegre almoço, ao final do qual entrega aos garotos as moedas guardadas nos cofrinhos de cada um. Ela sempre foi muito zelosa quanto à distribuição igualitária do troco arrecadado. Quando, por força do valor das moedas, ela não consegue depositar a mesma quantia nos dois cofrinhos, ela memoriza a diferença de forma a compensá-la no próximo depósito. 1. Tarefa Vó Vitória está ficando velha e tem medo que deslizes de memória a façam cometer injustiças com os netos, deixando de compensar as diferenças entre os cofrinhos. Sua tarefa é ajudar Vó Vitória, escrevendo um programa de computador que indique as diferenças entre os depósitos, de forma que ela não tenha que preocupar-se em memorizálas. 2. Entrada A entrada é composta de vários conjuntos de teste. A primeira linha de um conjunto de teste contém um número inteiro N, que indica o número de depósitos nos cofrinhos. As N linhas seguintes descrevem cada uma um depósito nos cofrinhos; o depósito é indicado por dois valores inteiros J e Z, separados por um espaço em branco, representando respectivamente os valores, em centavos, depositados nos cofres de Joãozinho e Zezinho. O final da entrada é indicado por N = 0. Exemplo de Entrada 3 20 25 10 5 10 10 4 0 5 12 0 0 20 17 1 0 3. Saída Para cada conjunto de teste da entrada seu programa deve produzir um conjunto de linhas na saída. A primeira linha deve conter um identificador do conjunto de teste, no formato “Teste n”, onde n é numerado seqüencialmente a partir de 1. A seguir seu programa deve escrever uma linha para cada depósito do conjunto de testes. Cada linha deve conter um inteiro que representa a diferença (em centavos) entre o valor depositado nos cofrinhos do Joãozinho e do Zezinho. Deixe uma linha em branco ao final de cada conjunto de teste. A grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente. Exemplo de Saída Teste 1 -5 0 0 Teste 2 -5 7 -13 3 (esta saída corresponde ao exemplo de entrada acima) 4. Restrições 0 ≤ N ≤ 100 (N = 0 apenas para indicar o fim da entrada) 0 ≤ J ≤ 100 (valor de cada depósito no cofre de Joãozinho) 0 ≤ Z ≤ 100 (valor de cada depósito no cofre de Zezinho) Solução do problema Abaixo seguem sugestões de solução para o problema. Note que os códigos abaixo não fornecem a solução completa, cabendo a você a implementação do restante do código para finalizar o trabalho. Estas sugestões devem ser executadas com a seguinte linha de comando: C:\java cofre <arquivodeentrada >arquivodesaida Sugestão 1 Nesta sugestão é usada uma instância de BufferedReader construida com uma instância “ponte” de InputStreamReader construida sobre a Entrada Padrão System.in A idéia é podermos ler linha por linha a entrada através do método readLine(). As classes InputStream e InputStreamReader não fornecem métodos para leitura de linhas! Quando a linha contém apenas uma seqüência de caracteres correspondente a um inteiro podemos utilizar a seguinte opção de conversão: int N=Integer.parseInt(br.readLine()); Mas quando a linha tem mais de uma sequência de caracteres devemos extrair da linha as diferentes seqüências. No programa abaixo extraimos as seqüências utilizando o método substring(int inicio, int final) que extrai uma subseqüência incluindo o caractere de índice inicio até o caractere, de índice final-1: J=Integer.parseInt(s.substring(0,s.indexOf(" "))); Z=Integer.parseInt(s.substring(s.indexOf(" ")+1,s.length())); Nesta sugestão é utilizado o método indexOf() que retorna o índice do caractere fornecido como parâmetro. Conforme o enunciado os dois valores inteiros são separados por um espaço. import java.io.*; import java.util.*; class cofre{ public static void main(String[] arg)throws IOException{ InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br= new BufferedReader(isr); int N=Integer.parseInt(br.readLine()); int cntTeste=0; String s; int J, Z, diferenca; while(N>0){ System.out.println("Teste "+(++cntTeste)); diferenca=0; for(int i=1; i<=N; i++){ s=br.readLine(); //substring(inclui,exclui) J=Integer.parseInt(s.substring(0,s.indexOf(" "))); Z=Integer.parseInt(s.substring(s.indexOf(" ")+1,s.length())); /* Calculo vem aqui*/ System.out.println(diferenca); } System.out.println(); N=Integer.parseInt(br.readLine()); } } } Sugestão 2 Nesta sugestão utiliza-se instâncias de StringTokenizer para extrair as seqüências de caracteres de uma linha correspondentes aos dois valores inteiros. import java.io.*; import java.util.*; class cofre{ public static void main(String[] arg)throws IOException{ InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br= new BufferedReader(isr); int N=Integer.parseInt(br.readLine()); int cntTeste=0; StringTokenizer s; int J, Z, diferenca; while(N>0){ System.out.println("Teste "+(++cntTeste)); diferenca=0; for(int i=1; i<=N; i++){ s=new StringTokenizer(br.readLine()); J=Integer.parseInt(s.nextToken()); Z=Integer.parseInt(s.nextToken()); /* Calculo vem aqui*/ System.out.println(diferenca); } System.out.println(); N=Integer.parseInt(br.readLine()); } } }