Neste problema cada pessoa coloca de lado algum dinheiro para presentear alguns de seus amigos no grupo. Este dinheiro é dividido de forma igual entre todos os presentes que a pessoa dará.
Entretanto, em qualquer grupo de amigos, algumas pessoas são mais generosas que outras e algumas pessoas têm mais dinheiro que outras.
Dado um grupo de amigos, o dinheiro que cada um do grupo gastou com presentes, e uma (sub)lista de amigos que cada um presenteará, você deve escrever um programa que determina quanto a mais (ou a menos) cada pessoa do grupo deu do que recebeu. Note que o valor de todos os presentes dados são inteiros. Cada pessoa dá a mesma quantidade inteira de dinheiro a cada amigo que presenteia, e dá o máximo possível.
Entrada
A entrada é uma seqüência de grupos de pessoas. Cada grupo consiste de muitas linhas:
o número de pessoas no grupo,
a lista de nomes das pessoas do grupo,
uma linha para cada pessoa do grupo, com o nome desta pessoa, a quantidade de dinheiro que ela tem para presentear, o número de pessoas que ela presenteou e o nome dos amigos que ela presenteou.
Todo nome é formado por uma única palavra, só usa letras minúsculas e não possui mais que 12 letras. Dinheiro é um inteiro positivo menor que 2000. Todo grupo tem pelo menos uma pessoa. A entrada consiste de um ou mais grupos e é terminada por um 0.
Saída
Para cada grupo de amigos, deve ser impressa uma linha para cada pessoa do grupo. Cada linha deve conter o nome desta pessoa, seguido do ganho (ou perda) líquida da pessoa, ou seja, a diferença entre o que ela recebeu e o que deu. Os nomes em um grupo devem ser impressos na mesma ordem em que apareceram pela primeira vez na entrada.
A saída para cada grupo deverá ser separada do próximo grupo por uma linha em branco.
Exemplo
Entrada
5 dave laura owen vick amr dave 200 3 laura owen vick owen 500 1 dave amr 150 2 vick owen laura 0 2 amr vick vick 0 0 3 liz steve dave liz 30 1 steve steve 55 2 liz dave dave 0 2 steve liz 0
Saída
dave 302 laura 66 owen -359 vick 141 amr -150 liz -3 steve -24 dave 27
import java.util.Scanner;
import java.util.ArrayList;
/* Membros do Grupo
* Alberto Felipe Dias Rodrigues
* Leandro Hossaki Mielli
* Fernando Costa
*/
public class Presentes {
public static void main(String Args[]){
// Instancia Variáveis
int numPessoas;
ArrayList<Pessoa> Pessoas = new ArrayList<Pessoa>();
Scanner input = new Scanner(System.in);
// Solicita o número de pessoas
System.out.printf("\nDigite o número de pessoas: ");
numPessoas = Integer.parseInt(input.next());
// Laço para solicitar o nome das pessoas e instanciar seus objetos
for(int i=0;i<numPessoas;i++){
System.out.printf("\nDigite o nome da %d pessoa: ", i);
String nome = input.next();
Pessoa pessoa = new Pessoa(nome);
Pessoas.add(pessoa);
}
// Laço para percorrer a lista de pessoas
for(Pessoa pessoa: Pessoas){
// Imprime o nome da pessoa corrente do laço
System.out.printf("\n%s", pessoa.getNome());
// Solicita o valor dado pela pessoa
System.out.printf("\nDigite o valor a ser presenteado: ");
int valor = Integer.parseInt(input.next());
// Atualiza o valor dado no objeto
pessoa.setValorDado(valor);
// Solicita o número de pessoas presenteadas
System.out.printf("\nDigite o número de pessoas que serão presenteadas: ");
int numPessoasPre = Integer.parseInt(input.next());
// Laço para solicitar o nome das pessoas presenteadas
for(int i=0;i<numPessoasPre;i++){
// Solicita o nome da pessoa presenteada
System.out.printf("\nDigite o nome da %d pessoa: ", i);
String nomePre = input.next();
// Laço para percorrer a lista de pessoas a procura da pessoa presenteada solicitada
for(Pessoa pessoaPre: Pessoas){
// Verifica se a pessoa corrente é a pessoa solicitada
if(pessoaPre.verificaIgualdade(nomePre)){
// Adiciona a pessoa aos presenteados
pessoa.addPresenteado(pessoaPre);
// Sai do laço
break;
}
}
}
}
// Laço para percorrer a lista de pessoas atualizando o valor recebido
for(Pessoa pessoa: Pessoas){
// Recupera a lista de presenteados da pessoa corrente
ArrayList<Pessoa> Presenteados = pessoa.getPresenteados();
// Recupera o valor do presente
int valorPre = pessoa.getValorPresente();
// Percorre a lista de presenteados atualizando o valor recebido de cada um
for(Pessoa presenteado: Presenteados){
// Atualiza o valor recebido da pessoa corrente
presenteado.ValorRecebido(valorPre);
}
}
// Laçp para percorrer a lista de pessoas imprimindo o seu saldo
for(Pessoa pessoa: Pessoas)
System.out.printf("\n%s = %d", pessoa.getNome(), pessoa.getSaldo());
}
}
// Classe Pessoa
// Guarda dados como nome da pessoa, valor dado, valor recebido e uma lista dos presenteados por ela
class Pessoa{
// Propriedades
private String Nome;
private int ValorDado;
private int ValorRecebido;
private ArrayList<Pessoa> Presenteados = new ArrayList<Pessoa>();
// Construtores
protected Pessoa(){
this.Nome = null;
this.ValorDado = 0;
this.ValorRecebido = 0;
}
protected Pessoa(String Nome){
this.Nome = Nome;
this.ValorDado = 0;
this.ValorRecebido = 0;
}
protected Pessoa(String Nome, int ValorDado){
this.Nome = Nome;
this.ValorDado = ValorDado;
this.ValorRecebido = 0;
}
protected Pessoa(String Nome, int ValorDado, ArrayList<Pessoa> Presenteados){
this.Nome = Nome;
this.ValorDado = ValorDado;
this.ValorRecebido = 0;
this.Presenteados = Presenteados;
}
// Métodos SET
protected void setNome(String Nome){
this.Nome = Nome;
}
protected void setValorDado(int ValorDado){
this.ValorDado = ValorDado;
}
protected void setPresenteados(ArrayList<Pessoa> Presenteados){
this.Presenteados = Presenteados;
}
// Métodos GET
protected String getNome(){
return this.Nome;
}
protected int getValorDado(){
return this.ValorDado;
}
protected ArrayList<Pessoa> getPresenteados(){
return this.Presenteados;
}
// Adiciona um novo presenteado na lista
protected void addPresenteado(Pessoa Presenteado){
Presenteados.add(Presenteado);
}
// Atualiza(Incrementa) o valor recebido pela pessoa
protected void ValorRecebido(int ValorRecebido){
this.ValorRecebido += ValorRecebido;
}
// Retorna o valor dado como presente para cada pessoa de sua lista
protected int getValorPresente(){
return ValorDado / Presenteados.size();
}
// Retorna o saldo da pessoa
protected int getSaldo(){
return ValorRecebido - ValorDado;
}
// Verifica igualdade de nome da pessoa
protected boolean verificaIgualdade(String Nome){
if(this.Nome.equals(Nome))
return true;
return false;
}
}
import java.util.ArrayList;
/* Membros do Grupo
* Alberto Felipe Dias Rodrigues
* Leandro Hossaki Mielli
* Fernando Costa
*/
public class Presentes {
public static void main(String Args[]){
// Instancia Variáveis
int numPessoas;
ArrayList<Pessoa> Pessoas = new ArrayList<Pessoa>();
Scanner input = new Scanner(System.in);
// Solicita o número de pessoas
System.out.printf("\nDigite o número de pessoas: ");
numPessoas = Integer.parseInt(input.next());
// Laço para solicitar o nome das pessoas e instanciar seus objetos
for(int i=0;i<numPessoas;i++){
System.out.printf("\nDigite o nome da %d pessoa: ", i);
String nome = input.next();
Pessoa pessoa = new Pessoa(nome);
Pessoas.add(pessoa);
}
// Laço para percorrer a lista de pessoas
for(Pessoa pessoa: Pessoas){
// Imprime o nome da pessoa corrente do laço
System.out.printf("\n%s", pessoa.getNome());
// Solicita o valor dado pela pessoa
System.out.printf("\nDigite o valor a ser presenteado: ");
int valor = Integer.parseInt(input.next());
// Atualiza o valor dado no objeto
pessoa.setValorDado(valor);
// Solicita o número de pessoas presenteadas
System.out.printf("\nDigite o número de pessoas que serão presenteadas: ");
int numPessoasPre = Integer.parseInt(input.next());
// Laço para solicitar o nome das pessoas presenteadas
for(int i=0;i<numPessoasPre;i++){
// Solicita o nome da pessoa presenteada
System.out.printf("\nDigite o nome da %d pessoa: ", i);
String nomePre = input.next();
// Laço para percorrer a lista de pessoas a procura da pessoa presenteada solicitada
for(Pessoa pessoaPre: Pessoas){
// Verifica se a pessoa corrente é a pessoa solicitada
if(pessoaPre.verificaIgualdade(nomePre)){
// Adiciona a pessoa aos presenteados
pessoa.addPresenteado(pessoaPre);
// Sai do laço
break;
}
}
}
}
// Laço para percorrer a lista de pessoas atualizando o valor recebido
for(Pessoa pessoa: Pessoas){
// Recupera a lista de presenteados da pessoa corrente
ArrayList<Pessoa> Presenteados = pessoa.getPresenteados();
// Recupera o valor do presente
int valorPre = pessoa.getValorPresente();
// Percorre a lista de presenteados atualizando o valor recebido de cada um
for(Pessoa presenteado: Presenteados){
// Atualiza o valor recebido da pessoa corrente
presenteado.ValorRecebido(valorPre);
}
}
// Laçp para percorrer a lista de pessoas imprimindo o seu saldo
for(Pessoa pessoa: Pessoas)
System.out.printf("\n%s = %d", pessoa.getNome(), pessoa.getSaldo());
}
}
// Classe Pessoa
// Guarda dados como nome da pessoa, valor dado, valor recebido e uma lista dos presenteados por ela
class Pessoa{
// Propriedades
private String Nome;
private int ValorDado;
private int ValorRecebido;
private ArrayList<Pessoa> Presenteados = new ArrayList<Pessoa>();
// Construtores
protected Pessoa(){
this.Nome = null;
this.ValorDado = 0;
this.ValorRecebido = 0;
}
protected Pessoa(String Nome){
this.Nome = Nome;
this.ValorDado = 0;
this.ValorRecebido = 0;
}
protected Pessoa(String Nome, int ValorDado){
this.Nome = Nome;
this.ValorDado = ValorDado;
this.ValorRecebido = 0;
}
protected Pessoa(String Nome, int ValorDado, ArrayList<Pessoa> Presenteados){
this.Nome = Nome;
this.ValorDado = ValorDado;
this.ValorRecebido = 0;
this.Presenteados = Presenteados;
}
// Métodos SET
protected void setNome(String Nome){
this.Nome = Nome;
}
protected void setValorDado(int ValorDado){
this.ValorDado = ValorDado;
}
protected void setPresenteados(ArrayList<Pessoa> Presenteados){
this.Presenteados = Presenteados;
}
// Métodos GET
protected String getNome(){
return this.Nome;
}
protected int getValorDado(){
return this.ValorDado;
}
protected ArrayList<Pessoa> getPresenteados(){
return this.Presenteados;
}
// Adiciona um novo presenteado na lista
protected void addPresenteado(Pessoa Presenteado){
Presenteados.add(Presenteado);
}
// Atualiza(Incrementa) o valor recebido pela pessoa
protected void ValorRecebido(int ValorRecebido){
this.ValorRecebido += ValorRecebido;
}
// Retorna o valor dado como presente para cada pessoa de sua lista
protected int getValorPresente(){
return ValorDado / Presenteados.size();
}
// Retorna o saldo da pessoa
protected int getSaldo(){
return ValorRecebido - ValorDado;
}
// Verifica igualdade de nome da pessoa
protected boolean verificaIgualdade(String Nome){
if(this.Nome.equals(Nome))
return true;
return false;
}
}
0 comentários:
Postar um comentário