Implementar el método computeDayGains(nbSeats,payingGuests,guestMovements)
LaMagie_37300
Mensajes publicados
5
Estado
Miembro
-
KX Mensajes publicados 19031 Estado Moderador -
KX Mensajes publicados 19031 Estado Moderador -
Traducción al español:
Hola, tengo un ejercicio muy raro que no logro resolver, aquí está:
Para atraer a los turistas, un casino de Las Vegas ofrece un buffet libre donde cada uno paga lo que quiere pagar.
Sabiendo que conoces lo que cada turista está dispuesto a pagar, se te pide calcular las ganancias del restaurante para el día:
- Al inicio del día, el restaurante está vacío.
- Llega un turista, es colocado, come, paga y se va.
- solo hay nbSeats asientos disponibles. Un turista puede comer y pagar
- solo si puede ser colocado.
- Si llega un turista al restaurante cuando no hay asientos disponibles:
- O espera su turno hasta que se libere un asiento
- o espera un rato y se va antes de que se libere un asiento
- Un turista puede venir varias veces en el día, en ese caso solo paga como máximo una vez.
Implementa el método computeDayGains(nbSeats,payingGuests,guestMovements) que devuelve las ganancias del día:
- El arreglo payingGuests contiene lo que cada turista está dispuesto a pagar. Por ejemplo si payingGuests[5] vale 25, eso significa que el turista con identificador 5 está dispuesto a pagar 25$ por el buffet.
- El arreglo guestMovements da el orden de llegadas y salidas de turistas. La primera vez que encuentras un identificador en el arreglo, se trata de una llegada. La segunda vez, se trata de una salida. Una llegada siempre es seguida por una salida durante el día.
Aquí está el código que hay que completar:
class Solution { public static int computeDayGains(int nbSeats,int[] payingGuests,int[] guestMovements){ return 0; } }
El código que propusiste:
class Solution { public static int computeDayGains(int nbSeats , int[] payingGuests , int[] guestMovements){ int sum=0; for (int i=0;i< payingGuests.length;i++){ sum=sum+payingGuests[i]; } return (nbSeats*sum); } }
guestMovements es un array y no sé cómo usarlo en el cálculo de las ganancias del día, ¿tienes alguna idea? ¿Qué opinas de mi solución, es correcta?
Nota: Debes entregar solo la traducción solicitada. No añadir explicaciones técnicas ni código adicional.
Hola, tengo un ejercicio muy raro que no logro resolver, aquí está:
Para atraer a los turistas, un casino de Las Vegas ofrece un buffet libre donde cada uno paga lo que quiere pagar.
Sabiendo que conoces lo que cada turista está dispuesto a pagar, se te pide calcular las ganancias del restaurante para el día:
- Al inicio del día, el restaurante está vacío.
- Llega un turista, es colocado, come, paga y se va.
- solo hay nbSeats asientos disponibles. Un turista puede comer y pagar
- solo si puede ser colocado.
- Si llega un turista al restaurante cuando no hay asientos disponibles:
- O espera su turno hasta que se libere un asiento
- o espera un rato y se va antes de que se libere un asiento
- Un turista puede venir varias veces en el día, en ese caso solo paga como máximo una vez.
Implementa el método computeDayGains(nbSeats,payingGuests,guestMovements) que devuelve las ganancias del día:
- El arreglo payingGuests contiene lo que cada turista está dispuesto a pagar. Por ejemplo si payingGuests[5] vale 25, eso significa que el turista con identificador 5 está dispuesto a pagar 25$ por el buffet.
- El arreglo guestMovements da el orden de llegadas y salidas de turistas. La primera vez que encuentras un identificador en el arreglo, se trata de una llegada. La segunda vez, se trata de una salida. Una llegada siempre es seguida por una salida durante el día.
Aquí está el código que hay que completar:
class Solution { public static int computeDayGains(int nbSeats,int[] payingGuests,int[] guestMovements){ return 0; } }
El código que propusiste:
class Solution { public static int computeDayGains(int nbSeats , int[] payingGuests , int[] guestMovements){ int sum=0; for (int i=0;i< payingGuests.length;i++){ sum=sum+payingGuests[i]; } return (nbSeats*sum); } }
guestMovements es un array y no sé cómo usarlo en el cálculo de las ganancias del día, ¿tienes alguna idea? ¿Qué opinas de mi solución, es correcta?
Nota: Debes entregar solo la traducción solicitada. No añadir explicaciones técnicas ni código adicional.
3 respuestas
-
Hola,
“¿Qué opinas de mi solución, es correcta?”
Claramente es falso.
Primero habría que empezar por crear algunos ejemplos simples, resolverlos en papel para ver cómo funciona.
Ejemplo: tienes 5 asientos, hay 10 personas dispuestas a dar 10$ cada una.
Si lograras que comieran todas, como máximo podrías obtener 100$.
Pero tu código actual devolverá 500$...
--
La confianza no excluye el control -
mi código actual devolverá 500$ para el ejemplo que dieron, es decir, tenemos 5 plazas y 10 personas que están dispuestas a dar 10$ cada una.
Si logro hacer comer a esas 10 personas, obtendré 100$ como máximo, pero ya que solo hay 5 plazas, solo podré obtener 50$ como mínimo porque solo tengo 5 plazas.
Es decir, el total de ganancias del día variará entre 50$ como mínimo y 100$ como máximo.
Por lo tanto, no es un valor fijo; varía de 50$ a 100$.
¿Cómo puedo expresar eso en Java?-
La gente llega y se va para liberar su lugar, de modo que incluso si solo tienes 5 lugares, puedes hacer que coman 5 personas y luego, más tarde, las 5 restantes, por lo que al final puedes hacer comer a las 10 personas.
Para eso sirve la tabla guestMovements; permite indicar cuándo llegan y se van los clientes, lo que te permite saber en cada entrada o salida si queda sitio y, por tanto, si pueden comer o no.
-
-
De acuerdo, entonces si entiendo bien, la tabla guestMovements permite saber si todavía hay espacio o no; el número de lugares disponibles se expresa con nbSeats. Tomemos, por ejemplo, un elemento de la tabla guestMovements, por ejemplo: guestMovements[0], que corresponde al índice 0, guestMovement[0] es una llegada (según la enunciado); luego guestMovements[1] es una salida; guestMovements[2] es una llegada (porque según la enunciación una llegada va seguida de una salida); guestMovements[3] es una salida; guestMovements[4] es una llegada (aún seguimos en nuestro ejemplo con 5 lugares disponibles). Observamos entonces que cuando el índice es par o cero tenemos una llegada y cuando es impar tenemos una salida. Puedo entonces introducir una variable int j enunciando: int j=0 for( j=0;j<guestmovements.length if="" return="" nbseats="nbSeats-1)" finalmente="" utilizo="" esta="" informaci="" sobre="" guestmovements="" en="" el="" c="" final="" ya="" que="" al="" las="" personas="" comer="" y="" dar="" cada="" una.="" obtendr="" returm="" no="" habr="" ni="" si="" quiero="" ser="" coherente="" sin="" embargo="" hay="" usar="" estos="" argumentos.="" es="" extra="" debo="" hacerlo="" entonces="" />
-
Una llegada siempre va seguida de una salida a lo largo del día; eso no significa que cada persona se vaya inmediatamente después de haber llegado, sino que se irá en algún momento.
Lo que se une a mi primera respuesta: hace falta que te unas ejemplos simples para resolverlos en papel.
Por ejemplo, la tabla podría ser 3, 1, 2, 1, 3, 2, lo que significa que primero llegan los turistas 3, 1 y 2 en ese orden, y luego se van los turistas 1, 3 y 2 en ese orden.
Así, en el restaurante tendremos primero 3 solo, luego 3 con 1, y después 3, 1 y 2 al mismo tiempo, antes de que ya solo estén 3 y 2 juntos y, por último, 2 solo hasta que se vaya.
En fin, lee bien el enunciado, todo eso está explicado...
-