Ordenação e Busca

Bom dia!

Estou com o seguinte problema:

Tenho 3 caixas de um supermercado, onde há uma fila e uma média de atendimento em cada um deles, por exemplo:

Caixa 1 - 3 pessoas / Atende 1 a cada 4 minutos.
Caixa 2 - 6 pessoas / Atende 1 a cada 5 minutos.
Caixa 3 - 5 pessoas / Atende 1 a cada 7 minutos.

A partir daí, deve chegar um cliente e verificar em qual fila ele deve entrar, então, preciso ver qual o caixa com o menor número de pessoas na fila. Até aí tudo bem, mas, caso haja 2 ou mais filas com o mesmo número de pessoas, o cliente deve entrar na que tiver menor tempo de atendimento.

A questão é: Como posso fazer isso, sem fazer infinitos if…else ? :?

Pensei em criar um vetor de Inteiros, ordenando do menor número de clientes para o maior, e, caso houvesse 2 números iguais, verificaria pelo tempo de espera, mas me quebrei na lógica e não consegui concluir… :cry:

Se alguém puder me dar uma dica…

Valeu!

poderia usar switch case

Isso é um problema de simulação. Não consigo entender onde estão os infinitos if-else.
Não se esqueça, nesse problema, que as pessoas também são atendidas e saem da fila também!

Dica: como isso é uma simulação, divida o tempo em minutos. Para simplificar, suponha que uma pessoa só pode entrar na fila em um minuto “cheio”.

[quote=entanglement]Isso é um problema de simulação. Não consigo entender onde estão os infinitos if-else.
Não se esqueça, nesse problema, que as pessoas também são atendidas e saem da fila também!
[/quote]

Exato, o problema das saídas da fila é o próximo, que também to confuso :cry:

Sim! Tenho uma simulação de 120 minutos… Um for de 1 a 120

Uma forma bem estúpida de resolver esse problema é criar 3 filas, cada qual com uma determinada capacidade máxima de 3, 6 e 5 clientes respectivamente.
Cuidado que o tipo “java.util.ArrayList” permite inserir uma quantidade indefinida de elementos (não há uma versão “limitada” de ArrayList) então você tem de checar antes de inserir.

[quote=entanglement]Uma forma bem estúpida de resolver esse problema é criar 3 filas, cada qual com uma determinada capacidade máxima de 3, 6 e 5 clientes respectivamente.
Cuidado que o tipo “java.util.ArrayList” permite inserir uma quantidade indefinida de elementos (não há uma versão “limitada” de ArrayList) então você tem de checar antes de inserir. [/quote]

Consegui fazer a entrada dos clientes na fila, conforme o tamanho e o tempo de espera… Agora tenho aquele outro problema que você citou, da saída da fila… Como posso fazer esta rotina de a cada x minutos, sair um cliente da fila y ?

Valeu…

Ele diz que a fila pode levar 4, 5 ou 7 minutos para processar um cliente. Pelo que imagino, você tem de associar a cada fila o instante em que o último cliente começou a ser processado.

Vou dar um exemplo boboca. Digamos que você tenha a fila 1 (que tem tamanho 3 e processa um cliente em 4 minutos. )

O primeiro cliente entrou no momento 0. Digamos que ele demore 4 minutos para ser processado. Então você associa à fila 1 o instante 0 (que é o instante em que o último cliente começou a ser processado).
No momento 1, o cliente não foi ainda completamente processado.
No momento 2, …
No momento 3, …
No momento 4, o cliente foi completamente processado, e pode ser removido da fila. Então o instante em que o último cliente foi processado é o instante 4.

Mas como posso fazer isso dentro de um for ?

Tenho o seguinte: um for de 1 a 120, onde a cada passagem, é como se tivesse passado 1 minuto, e chega um novo cliente. No início de cada passagem, devo verificar se devo ou não remover algum cliente, e é aí que eu empaquei…