"Einführung in Ruby für diejenigen, die professionell werden wollen" Ich bin ein Anfänger in der Programmierung, nachdem ich das sogenannte Kirschbuch gelernt habe. Als ich meine Hände bewegen und meine Eingaben in die Praxis umsetzen wollte, fand ich einen Artikel des Autors. "Wenn Sie Probleme mit dem Ausgabematerial haben !? Ich habe Programmierprobleme für Ruby-Anfänger gesammelt (insgesamt 10 Fragen)"
Ich habe versucht, dieses vierte Problem zu lösen.
Klicken Sie hier für weitere Probleme Erste Frage: Problem bei der Kalendererstellung (lustiges Ruby-Übungsproblem) Zweite Frage: Problem bei der Erstellung von Karaoke-Maschinen Dritte Frage: Problem bei der Erstellung der Bingokarte Vierte Frage: Problem mit Bonusgetränken Fünfte Frage: Problem beim Erstellen des Telefonbuchs
Für Details von hier
Wenn Sie ein Getränk in einem Süßwarenladen kaufen, erhalten Sie ein neues Getränk mit 3 leeren Flaschen. Erstellen Sie ein Programm, das die Gesamtzahl der Getränke berechnet, die Sie aus der Anzahl der zuerst gekauften Getränke trinken können. Wenn Sie zum ersten Mal 100 Flaschen kaufen, wie viele Flaschen können Sie insgesamt trinken?
** Bemerkungen ** Dieses Problem basiert auf dem mathematischen Problem der dritten Klasse der Grundschule.
** Beispiel **
|Anzahl der Einkäufe|Anzahl der Getränke| |--:|--:| | 0 | 0 | | 1 | 1 | | 3 | 4 | | 11 | 16 | | 100 | (Nach Programm berechnen) |
Es stellte sich heraus, dass es so etwas war
class BonusDrink
def self.total_count_for(amount)
if amount.zero?
0
elsif amount.odd?
3 * amount / 2
elsif amount.even?
3 * (amount - 1) / 2 + 1
end
end
end
Hier ist der Testcode.
require_relative '../Bonus_drink/drink'
RSpec.describe BonusDrink do
it "total_count_for" do
expect(BonusDrink.total_count_for(0)).to eq 0
expect(BonusDrink.total_count_for(1)).to eq 1
expect(BonusDrink.total_count_for(3)).to eq 4
expect(BonusDrink.total_count_for(11)).to eq 16
end
end
Ich denke, dass es als Programm etabliert ist, aber es gibt ein leichtes Gefühl, dass diese Lösung als Zweck des Programmierproblems gut war. (Meistens habe ich das Papier und den Stift bewegt, um es mathematisch zu lösen.)
Wie Sie im Problem sehen können, können Sie "3 leere Flaschen und 1 neue austauschen". Der Punkt dieses Problems ist, dass sogar eine neue Flasche, die Sie umgetauscht und erhalten haben, ausgetauscht werden muss.
Damit
Anzahl der gekauften: 3 Anzahl der neu ausgetauschten:1 Gesamtzahl der Getränke: 4
Wenn Sie jedoch die erhaltenen Flaschen hinzufügen und drei erreichen, können Sie eine andere umtauschen. Zum Beispiel
Anzahl der gekauften: 5 Anzahl der neu ausgetauschten:1 Zusätzliche ausgetauschte Bücher: 1 Gesamtzahl der Getränke: 7
Es bedeutet das. Daher werden mit zunehmender Anzahl von Einkäufen zusätzliche Umtauschvorgänge viele Male wiederholt.
Ich dachte, es sei ein Problem, dies durch Programmieren auszudrücken und wiederholt die Gesamtzahl der Flaschen und die Anzahl der ersetzten Flaschen zu ersetzen, um näher an die maximale Gesamtzahl heranzukommen, aber ich konnte nicht daran denken und gab auf. Ich würde mich freuen, wenn Sie mir in den Kommentaren mitteilen könnten, ob Sie Beispiele für Antworten haben.
Wie habe ich das gelöst? Ich habe die Anzahl der gekauften Flaschen und die Anzahl der Flaschen, die ich trinken konnte, aufgeschrieben.
Anzahl der Einkäufe | Anzahl der Getränke |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 4 |
4 | 5 |
5 | 7 |
6 | 8 |
7 | 10 |
8 | 11 |
9 | 13 |
10 | 14 |
11 | 16 |
Dann *** *** Wenn die Anzahl der gekauften Flaschen n eine ungerade Zahl ist, stimmt der Wert von (n * 3) mit der Gesamtzahl der trinkbaren Flaschen bei n und der Anzahl der trinkbaren Flaschen bei (n + 1) überein *** Ich fand heraus. Übrigens, wenn es 0 ist, hält es nicht. (Es gibt verschiedene andere Regeln, aber dieses Mal werde ich diese Gleichung verwenden.) Speziell,
Anzahl der Einkäufe | Anzahl der Getränke |
---|---|
5 | 7 |
6 | 8 |
5 * 3 = 15
7 + 8 = 15
Es wird sein! Mit anderen Worten, *** "Wenn Sie n durch 3 teilen und durch 2 teilen, können Sie die Anzahl der Getränke finden, die Sie trinken können" ***. Wenn Sie dies in Programmierung übersetzen,
#Wenn es seltsam ist
3 * amount / 2
#Wenn es gerade ist, wird es aus der vorherigen ungeraden Zahl berechnet.
3 * (amount - 1) / 2 + 1
[Beispiel der obigen Antwort](#Beispiel der Antwort) ist eine Zusammenfassung des obigen Inhalts.
Ich verstehe, dass diese Art von Regel nicht gilt, aber ich bin mir nicht sicher ** "Warum das passiert" **. Wenn Sie auf leicht verständliche Weise erklären können, möchte ich Sie bitten, mit Verlegenheit zu unterrichten.
Vielen Dank!
Recommended Posts