如果硬币被放置在网格上,并且只有一整行或一列可以翻转,我们如何才能翻转硬币以获得最少的反面数量。我尝试使用贪婪的解决方案,在这种解决方案中,我翻转尾部数量大于正面的行或列,并重复该过程,直到数量没有变化。但我发现,这种方法在某些时候并不能给我一个最优的解决方案。HHTTHT1. Flip the row 3THH2.
所以,我最近开始学习Haskell,我遇到了一个问题,如果n个硬币被翻转,我需要计算所有可能的结果(2^n)。例如,如果两个硬币被翻转,输出应该是[H,T,T,H,T,T,T]。同样,对于3个硬币,它应该是[H,T,T]。我的函数对n的任意值不起作用,只有当我以前知道n时,它才能工作。我正在考虑使用递归,但我不确定语法。[[a, b] | a <- states x, b <- states (head xs)]states _ = [True, False]
这个函数适