Um grupo de alunos são sócios de um clube que viaja anualmente para diferentes locais
. Seus destinos no passado incluíram Indianápolis, Phoenix, Nashville,
Filadélfia, San Jose e Atlanta. Nesta primavera, eles estão planejando uma viagem para Eindhoven.
O grupo concorda antecipadamente em dividir as despesas igualmente, mas não é prático dividir
todas as despesas à medida que ocorrem. Assim, os indivíduos do grupo pagam por coisas específicas,
como refeições, hotéis, corridas de táxi e passagens aéreas. Após a viagem, as despesas de cada aluno
são computadas e o dinheiro é trocado de modo que o custo líquido de cada um seja o mesmo, com
uma diferença de um centavo. No passado, essa troca de dinheiro era tediosa e demorada. Seu
O trabalho é calcular, a partir de uma lista de despesas, a quantidade mínima de dinheiro que deve
mudar de mãos para equalizar (em um centavo) todos os custos dos alunos.
Entrada:
A entrada padrão conterá as informações para várias viagens. Cada viagem consiste em uma
linha contendo um número inteiro positivo n denotando o número de alunos na viagem. Isso é
seguido por n linhas de entrada, cada uma contendo o valor gasto por um aluno em dólares
e centavos. Não há mais de 1000 alunos e nenhum aluno gastou mais do que
$ 10.000,00. Uma única linha contendo 0 segue as informações da última viagem.
Saída:
Para cada viagem, imprima uma linha informando a quantidade total de dinheiro, em dólares e centavos,
que deve ser trocado para equalizar os custos dos alunos.
Amostra de entrada
3
10,00
20,00
30,00
4
15,00
15,01
3,00
3,01
0
Solução A
etapa 1 será calcular a média de todas as despesas. Agora, quem gasta mais do que o valor médio terá de ser compensado pelas pessoas que gastou mais do que o valor médio. Portanto, o valor total a ser exigido pelas pessoas que gastaram mais do que a média será a soma da diferença entre o valor que gastaram e o valor médio.
Abaixo está o código para o mesmo:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class TripExpense {
/ **
* @param args
* @throws IOException
* /
public static void main (String [] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = "";
//read the input from the console
while ((input = br.readLine()) != null && !input.trim().equals("n") && !input.trim().equals(""))
{
int numberOfPeople = Integer.parseInt(input);
if (numberOfPeople == 0)
{
break;
}
double [] expenses = new double [numberOfPeople];
double sum = 0;
for(int i=0; i<numberOfPeople; i++)
{
input = br.readLine();
expenses [i] = Double.parseDouble(input);
sum += expenses[i];
}
double avgExpense = sum/numberOfPeople;
sum = 0;
for (double expense : expenses)
{
if((avgExpense - expense) > 0.01)
{
sum += (avgExpense - expense);
}
}
System.out.println(sum);
}
}
}