如何在Haskell中一次又一次地增加一个数字?

jxct1oxe  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(123)

我想为每一个新的调用增加一个数字,所以不是糖果(x-10),而是糖果(x-20),糖果(x-30)等等。

module AufgabeBonbons where

bonbons :: Int -> Int
bonbons x | x <= 550 && x >= 10 = 1 + bonbons(x-10)
            |otherwise = 0

我试着创建一个新的函数,但我不确定这是否是处理这个问题的正确方法。

oyjwcjzk

oyjwcjzk1#

基于以下描述:
好的,我有一个美分x,我想买糖果。糖果每个售价10美分,20美分等等,最多1欧元。我只能买一个糖果的每一种(每美分),我想知道如何mandies糖果,我可以买。
你基本上是在寻找方程成立的最大的 n

这是一个已知的级数,可以解为:

或者这个

事实上,想象一下我们有30美分,那么结果是(105 × 125-5)/10=2。
因此,我们可以将其实现为:

bonbons :: Int -> Int
bonbons x = min 10 (floor ((sqrt (5 * (4*x'+5)) - 5) / 10))
  where x' = fromIntegral x

我想为每一个新的调用增加一个数字,所以不是bonbons(x-10),应该是bonbons(x-20)bonbons(x-30)等等。
我们可以使用一个变量来指定下一个糖果的数量:

bonbons :: Int -> Int
bonbons = go 10
  where go m n
           | m <= n && m < 100 = 1 + go (m+10) (n-m)
           | otherwise = 0

相关问题