Implémenter la méthode computeDayGains(nbSeats,payingGuests,guestMovements)

Fermé
LaMagie_37300 Messages postés 3 Date d'inscription dimanche 25 octobre 2020 Statut Membre Dernière intervention 4 novembre 2020 - 25 oct. 2020 à 14:55
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 25 oct. 2020 à 21:45
Bonjour, j'ai un exercice très bizarre que je n'arrive pas à résoudre,le voici:

Pour attirer les touristes ,un casino de Las Vegas propose un buffet à volonté
où chacun paye ce qu'il souhaite payer.

Sachant que vous connaissez ce que chaque touriste est prêt à payer, on vous
demande de calculer les gains du restaurant pour la journée:
  • En début de journée , le restaurant est vide.
  • Un touriste arrive,est placé,mange,paye et s'en va.
  • il y'a seulement nbSeats places disponibles.Un touriste peut manger et payer

seulement s'il peut être placé.
  • Si un touriste arrive au restaurant alors qu'il n'y a plus de places disponibles:

-Soit il attend son tour jusqu'à ce qu'une place se libère
- Soit il attend un moment et part avant qu'une place se libère
  • Un touriste peut venir plusieurs fois dans la journée dans ce cas il ne paye au maximum

qu'une seule fois.

implémentez la méthode computeDayGains(nbSeats,payingGuests,guestMovements) qui renvoie les gains
de la journée:
  • Le tableau payingGuests contient ce que chaque touriste est prêt à payer.Par exemple si payingGuests[5] vaut 25,

cela veut dire que le touriste avec l'identifiant 5 est prêt à payer 25$ pour le buffet.
  • Le tableau guestMovements donne l'ordre des arrivées et des départs de touristes.La première fois que vous trouvez un identifiant dans le tableau, il s'agit d'une arrivée.La deuxième fois ,il s'agit d'un départ.Une arrivée est toujours suivie d'un départ dans la journée.

Voici le code qu'il faut compléter:

  class Solution {

       public static int computeDayGains(int nbSeats,int[] payingGuests,int[] guestMovements){

                                                                                             

               return 0;

                  }

              }


Voici le code que j'ai proposé:

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 est un array et je ne sais pas comment l'utiliser dans le calcul des gains de la journée,
Avez - vous une idée ?
Que pensez vous de ma solution,est elle juste?

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
25 oct. 2020 à 15:30
Bonjour,

"Que pensez vous de ma solution,est elle juste?"
Clairement c'est faux.

Il faudrait déjà commencer par créer quelques exemples simples, les résoudre sur papier pour voir comment ça fonctionne.

Exemple : tu as 5 places, il y a 10 personnes qui sont prêtes à donner 10$ chacune.
Si tu arrivais à toutes les faire manger, au maximum tu pourrais obtenir 100$.
Mais ton code actuel renverra 500$...
0
LaMagie_37300 Messages postés 3 Date d'inscription dimanche 25 octobre 2020 Statut Membre Dernière intervention 4 novembre 2020
25 oct. 2020 à 16:00
ok mon code actuel renverra 500$ pour l'exemple que vous avez donné à savoir on dispose de 5 places et il y'a 10 personnes qui sont prêtes à donner 10$ chacune.
Si j'arrive à faire manger ces 10 personnes j'obtiendrai 100$ au maximum,mais vu qu'il ya que 5 places ,j'arriverai à obtenir que 50$ au minimum car je dispose que de 5 places.
C'est à dire que le total des gains de la journée variera de 50$ minimum à 100$ maximum.
Ce n'est donc pas une valeur fixe,elle varie de 50 $ à 100$.
Comment je peux exprimer ça en java?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
25 oct. 2020 à 16:14
Les gens arrivent et repartent pour libérer leur place de sorte que même si tu n'as que 5 places tu peux très bien faire manger 5 personnes puis plus tard les 5 autres, donc tu peux très bien faire manger les 10 personnes au final.

C'est à ça que sert le tableau guestMovements il permet de dire quand arrivent et repartent les clients, ce qui te permet de savoir à chaque entrée ou sortie s'il reste de la place et donc s'ils peuvent manger ou non.
0
LaMagie_37300 Messages postés 3 Date d'inscription dimanche 25 octobre 2020 Statut Membre Dernière intervention 4 novembre 2020
25 oct. 2020 à 18:42
D'accord donc si je comprends bien le tableau guestMovements permet de savoir s'il reste de la place ou non, d'accord,le nombre de place disponible s'exprime par nbSeats.
Prenont par exemple un élément du tableau guestMovements,par exemple:
guestMovements[0],qui correspond à l'indice 0,guestMovement[0] est une arrivée(d'après l'énoncé) ensuite guestMovements[1] est un départ,guestMovement[2] est une arrivée (car d'après l'énoncé une arrivée est suivie d'un départ), guestMovements[3] est un départ, guestMovements[4] est une arrivée.(on est toujours dans notre exemple avec 5 places disponibles).
On constate donc que lorsque l'indice est paire ou nul on a une arrivée et quand c'est impair on a un départ.
Je peux donc introduire une variable
int j
en disant que :
int j=0
for( j=0;j<guestMovements.length,j++){
if(guestMovements[j]%2==0 return nbSeats=nbSeats-1)


Finalement comment j'utilise cette information à propos de guestMovements dans le code final?vu qu'à la fin les 10 personnes mangeront et donneront 10$ chacun.
Au final j'aurai:
returm (sum+payingGuest[i])
,il n'y aura pas du tout nbSeats et guestMovements si je veux être cohérent ,pourtant il faut utiliser ces arguments là.
C'est bizarre, comment dois je faire alors?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
25 oct. 2020 à 21:45
Une arrivée est toujours suivie d'un départ dans la journée, ça ne signifie pas que chaque personne s'en va immédiatement après être arrivé mais qu'il partira forcément à un moment.

Ce qui rejoint ma première réponse, il faut que tu te créé des exemples simples pour les résoudre sur papier.

Par exemple, le tableau pourrait être 3, 1, 2, 1, 3, 2 ce qui signifie que l'on a d'abord les arrivées des touristes 3, 1 et 2 dans cet ordre, puis le départ des touristes 1, 3 et 2 dans cet ordre.
Donc dans le restaurant on aura d'abord 3 tout seul, puis 3 avec 1, et ensuite 3 1 et 2 en même temps, avant de n'avoir plus que 3 et 2 ensemble et enfin 2 tout seul jusqu'à ce qu'il parte.

Bref, relis bien l'énoncé, tout cela est expliqué...
1