"Introduction à Ruby pour ceux qui veulent devenir un professionnel" Je suis un débutant en programmation après avoir appris le livre dit de la cerise. Quand j'ai voulu bouger mes mains et mettre en pratique ce que j'apportais, j'ai trouvé un article de l'auteur. "Si vous rencontrez des problèmes avec le matériel de sortie!? J'ai collecté des problèmes de programmation pour les débutants Ruby (10 questions au total)"
J'ai essayé de résoudre ce quatrième problème.
Cliquez ici pour d'autres numéros Première question: Problème de création de calendrier (problème de pratique Ruby amusant) Deuxième question: Problème de création de machine à karaoké Troisième question: Problème de création de carte de bingo Quatrième question: Problème de boisson bonus Cinquième question: Problème de création du répertoire
Pour plus de détails à partir d'ici
Lorsque vous achetez une boisson dans une confiserie, vous obtenez une nouvelle boisson avec 3 bouteilles vides. Créez un programme qui calcule le nombre total de boissons que vous pouvez boire à partir du nombre de boissons que vous avez achetées en premier. De plus, si vous achetez 100 bouteilles pour la première fois, combien de bouteilles pouvez-vous boire au total?
** Remarques ** Ce problème est basé sur le problème arithmétique de la troisième année du primaire.
** Exemple **
|Nombre d'achats|Nombre de boissons| |--:|--:| | 0 | 0 | | 1 | 1 | | 3 | 4 | | 11 | 16 | | 100 | (Calculer par programme) |
Il s'est avéré être quelque chose comme ça
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
Voici le code de test.
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
Je pense qu'il est établi comme un programme, mais il y a un léger sentiment que cette solution était bonne comme objectif du problème de programmation. (La plupart du temps, j'ai déplacé le papier et le stylo pour le résoudre mathématiquement.)
Comme vous pouvez le voir dans le problème, vous pouvez obtenir «« Échangez 3 bouteilles vides et 1 nouvelle ». Le point de ce problème est que même une nouvelle bouteille que vous avez échangée et reçue sera sujette à échange.
Alors
Nombre d'achats: 3 Nombre de nouvellement échangés:1 Nombre total de boissons: 4
Cependant, si vous ajoutez les bouteilles reçues et que vous atteignez trois, vous pouvez en échanger une autre. Par exemple
Nombre d'achats: 5 Nombre de nouvellement échangés:1 Livres supplémentaires échangés: 1 Nombre total de boissons: 7
Cela signifie que. Par conséquent, à mesure que le nombre d'achats augmente, des échanges supplémentaires seront répétés plusieurs fois.
J'ai pensé que c'était un problème d'exprimer cela par programmation et de substituer à plusieurs reprises le nombre total de bouteilles et le nombre de bouteilles remplacées pour me rapprocher du nombre total maximum, mais je n'y ai pas pensé et j'ai abandonné. Je vous serais reconnaissant si vous pouviez me faire savoir dans les commentaires si vous avez des exemples de réponses.
Alors, comment ai-je résolu le problème?
Nombre d'achats | Nombre de boissons |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 4 |
4 | 5 |
5 | 7 |
6 | 8 |
7 | 10 |
8 | 11 |
9 | 13 |
10 | 14 |
11 | 16 |
Ensuite, *** "Lorsque le nombre de bouteilles achetées n est impair, la valeur de (n * 3) correspond au nombre total de bouteilles buvables en n et (n + 1)" *** J'ai découvert. Au fait, quand il est à 0, il ne tient pas. (Il existe diverses autres règles, mais cette fois je vais utiliser cette équation.) En particulier,
Nombre d'achats | Nombre de boissons |
---|---|
5 | 7 |
6 | 8 |
5 * 3 = 15
7 + 8 = 15
Ce sera! En d'autres termes, *** "Si vous divisez n par 3 et le divisez par 2, vous pouvez trouver le nombre de boissons que vous pouvez boire." *** Si vous traduisez cela en programmation,
#Quand c'est bizarre
3 * amount / 2
#Lorsqu'il est pair, il est calculé à partir du nombre impair précédent.
3 * (amount - 1) / 2 + 1
[Exemple de la réponse ci-dessus](#Exemple de réponse) est un résumé du contenu ci-dessus.
Je comprends que ce type de règle ne tient pas, mais je ne suis pas sûr ** "Pourquoi cela se produit" **. Si vous pouvez expliquer d'une manière facile à comprendre, je voudrais vous demander d'enseigner avec embarras.
Je vous remercie!