2009-05-02 10 views
-4

sind die Zwängeeinen Algorithmus benötigen dieses Problem

  • Ich habe drei Schaufeln (Wasser) Kapazitäten 10 Liter, 2 Liter und 50 Liter hier zu lösen.
  • Ich werde einen weiteren Eimer mit Wasser von 0 bis 100 Liter geben
  • Ich muss Eimer in der Reihenfolge 10 zuerst, 2 nächste und 50 zuletzt füllen. Alles Weitere kann entsorgt werden.

Wie kann dies am besten mit den wenigsten Codezeilen durchgeführt werden? while-Schleife? Ideen bitte.

Antwort

3

Jedes Mal stephan202 zu beantworten, benutzen Sie einen Eimer mit 10 Liter füllen, Sie haben 10 weniger Liter in Ihrem Quelleimer.

Jedes Mal, wenn Sie einen Eimer mit 2 Litern füllen, haben Sie 2 Liter weniger in Ihrem Eimer.

Jedes Mal, wenn Sie einen Eimer mit 50 Litern füllen, haben Sie 50 Liter weniger in Ihrem Eimer.

Können wir das verallgemeinern?

Jedes Mal, wenn Sie einen Eimer mit N Litern füllen, haben Sie N weniger Liter in Ihrem Quelleimer.

Sie können nicht weniger als null Liter in Ihrem Quell-Bucket haben. Was Sie also tatsächlich füllen, ist der kleinere Wert im Quell-Bucket und die Kapazität des Ziel-Buckets.

Da das ist der Betrag, den Sie ausgefüllt,

Jedes Mal, wenn Sie einen Eimer mit N Liter füllen, müssen Sie min (N, source_bucket_capacity) weniger Liter in der Quell Eimer.

Während Sie im Quelleimer Wasser haben, füllen Sie weiterhin die Eimer. Halten Sie an, wenn der Quell-Bucket leer ist oder Sie keine Ziel-Buckets mehr haben.

So

  • die Quelle Eimer einrichten.
  • richten Sie eine Liste der Ziel-Buckets ein.
  • während des Source-Eimer nicht leer ist, und Sie haben nicht gefüllte Eimer in der Zielliste
    • die nächsten Ziel Eimer bekommen.
    • füllen es min (N, source_bucket_capacity)
    • Dekrement der Quelle bucket durch min (N, source_bucket_capacity)
0

Wenn Sie dieses Problem auf eine beliebige Anzahl von Eimern mit beliebigen Kapazitäten nicht verallgemeinern wollen, dann müssen Sie nicht über eine Schleife überhaupt:

Name Geben Sie den Eimer a = 10, b = 2, c = 50 bzw. d = 100. Subtrahiere a von d, b von d und c von d, während d größer als 0 ist. Das ist alles.

1

Ich verstehe es nicht, warum können Sie nicht einfach die Eimer füllen? Kannst du das Problem besser erklären? Ich sehe nicht, die Einschränkung, bitte die Einschränkungen erklären, wenn es welche gibt ...

Wenn es nicht als Einschränkung sind, können Sie nur

0
<?php echo (($i = rand(1,100) - 62) > 0) ? $i : 0; ?> 

Der obige Code wird ausgegeben, wie viel Liter in einem gelassen werden der Eimer wird zufällig mit 1-100 Litern gefüllt, wenn er in die Gesamtkapazität der anderen drei Eimer (62) eingefüllt wird.

Wie die anderen bereits festgestellt haben, verrät die Art und Weise, wie Sie Ihre Frage gestellt haben, wenig über das eigentliche Problem, das Sie zu lösen versuchen. Ich bezweifle, dass die obige Lösung das ist, was Sie liefern sollen. Aber da du nur nach der kürzesten Lösung gefragt hast, nun, das ist es. Eine Linie.

Verwandte Themen