Divisez les oranges en boîtes de différentes tailles. Java Puzzle [fermé]


Il Y a trois cases

L'utilisateur saisit le nombre d'oranges.

Grande boîte contient 20, moyen 10 et le petit 5 oranges.

Le coût d'expédition d'une grande boîte est de 8,80$, une boîte moyenne, 6,00 $et une petite boîte de 4,50$.

La commande est expédiée de la manière la moins coûteuse.

Par exemple, la commande de 52 oranges sera expédiée dans quatre boîtes: deux grandes, une moyenne et une petite.

C'est là que ça devient délicat.

La règle pour l'emballage est de remplir les grandes et moyennes boîtes complètement; c'est, la zone est entièrement emballé.

Seules les petites cases peuvent avoir des espaces vides. Par exemple, pour expédier 52 oranges, vous auriez pu utiliser 3 grandes boîtes, mais cela laisserait la troisième boîte pas complètement emballée.

Le coût d'expédition doit être affiché et la méthode doit être utilisée en java

Quelqu'un se soucie d'aider un vieux gars à apprendre java?

Author: Ben Smith, 2016-03-01

2 answers

Je ne vous fournirai pas de solution, car vous vouliez de l'aide pour apprendre et non pour résoudre :

Quelqu'un se soucie d'aider un vieux gars à apprendre java?

Je suggère de faire ce qui suit:

  1. Définir un algorithme, qui va générer toutes les méthodes d'expédition possibles
  2. Facultatif: Définissez un "filtre" qui ignorera automatiquement les méthodes d'expédition manifestement mauvaises
  3. Passez par les méthodes d'expédition, trouvez le moins cher un.

Je recommande d'utiliser Java-8-streaming-cela peut rendre vos algorithmes courts et lisibles

Étape suivante facultative:

  1. réécrivez votre code pour créer les méthodes d'expédition en tant qu ' "arbre" - vous pouvez donc ignorer des branches entières qui sont évidemment plus chères que les autres branches
 1
Author: slartidan, 2016-03-01 13:48:43

Évidemment, un module vous dira si le nombre d'oranges que vous avez, tenir dans une boîte (la boîte est pleine pour les boîtes moyennes et grandes), si oui, essayez à nouveau avec les oranges restantes, il n'essayez pas avec une boîte plus petite jusqu'à ce que vous n'ayez plus d'orange.

Cela devrait suffire car il n'y a aucun cas où l'expédition de deux petites boîtes est moins chère qu'une grande boîte.

EDIT: J'ai finalement changé d'avis et le module n'est pas nécessaire. J'ai utilisé une division entière pour le faire fonctionner.

 public static void main(String[] args) {
    int oranges = 15;

    int bigBoxes = oranges / 20;
    int mediumBoxes = (oranges-bigBoxes*20) / 10;
    int smallBoxes = ((oranges-bigBoxes*20-mediumBoxes*10)+4) / 5;

    System.out.println(String.format("big=%d, med=%d, small=%d", bigBoxes, mediumBoxes, smallBoxes));
}
 1
Author: Xvolks, 2016-03-01 14:12:36