提问人:svenjaleo 提问时间:10/16/2023 更新时间:10/16/2023 访问量:81
如何在 Haskell 中一遍又一遍地增加一个数字?
How do I increase a number over and over again in Haskell?
问:
我想为每个新调用增加一个数字,所以应该用 bonbons(x-20)、bonbons(x-30) 等代替 bonbons(x-10)。
module AufgabeBonbons where
bonbons :: Int -> Int
bonbons x | x <= 550 && x >= 10 = 1 + bonbons(x-10)
|otherwise = 0
我试图创建一个新函数,但我不太确定这是否是处理此问题的正确方法。
答:
1赞
willeM_ Van Onsem
10/16/2023
#1
基于以下描述:
好的,所以我有美分x,我想买糖果。糖果每颗售价 10 美分、20 美分等,最高可达 1 欧元。我只能买一种糖果(每美分),我想知道我能买到多少糖果。
您实际上是在寻找方程成立的最大 n:
这是一个已知的系列,可以解决为:
或者这个:
事实上,想象一下我们有 30 美分,那么结果是 (√5×√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)
我们可以使用一个变量来指定下一个 bonbon 的数量:
bonbons :: Int -> Int
bonbons = go 10
where go m n
| m <= n && m < 100 = 1 + go (m+10) (n-m)
| otherwise = 0
评论
0赞
amalloy
10/16/2023
公式在深色模式下不能很好地呈现,背景是透明的,文本是黑色的。
1赞
Daniel Wagner
10/16/2023
最终实现中的循环也可以通过组合预制的标准库循环来实现:.bonsbons x = length . takeWhile (<=x) . scanl1 (+) $ [10,20..100]
评论