我需要编写一个具有前x个回文总和的程序。我真的完全不知道该怎么做。有人可以写一个程序(任何语言,但请注明)这样做吗?
目前,我可以用这个Haskell程序打印出前9000个回文。我怎么能编辑它以便它产生所有前9000个回文而不是第x个回文?
prefixes 0 = [[k] | k <-['1'..'9']]
prefixes n = [k:s | s <- prefixes (n-1), k <- ['0'..'9']]
p n =
[ reverse s ++ tail s | s <- prefixes n ] ++
[ reverse s ++ s | s <- prefixes n ] ++
p (n+1)
allpals = [[]] ++ p 0
main = do print (allpals !! 9000)
奖金挑战:斐波纳契序列的前x个数中的回文总和怎么样? &GT;:)
答案 0 :(得分:0)
让我们先看看第一个问题。假设你有一个函数返回作为参数接收的回文的下一个回文。如果你有这样的功能,你可以这样做:
selectedNode.Nodes
因此,我们减少了问题空间。我们的新问题是:我们如何才能找到下一个回文。这就是你应该这样做的方式:
编辑: 来自斐波那契序列中前n个元素的回文总和
您可以使用Binet's formula获取第n个Fibonacci数并将结果四舍五入到最接近的整数,或者您可以递归计算它。如果选择Binet的公式,那么建议使用Phi和phi的当前使用功率,并将它们分别与Phi和phi相乘。如果你选择传统方式(在这种特殊情况下是可取的),那么你需要有两个前斐波纳契数。无论如何,这是应该如何做的(我在我的解决方案中选择了传统方式):
function getPalindromeSum(nr)
sum <- 0
palindrome <- 0
while (nr > 0) do
sum <- sum + palindrome
palindrome <- nextPalindrome(palindrome)
nr <- nr - 1
end while
return palindrome
end function
另外,如果你想要对Fibonacci序列中的前n个回文求和,你只需要相应地改变你的while条件。
此外,我必须强调,Fibonacci序列中的前n个回文和前n个Fibonacci数中具有有限n要求的回文需要妥协,并指明我们严格或非严格地搜索阳性阳性索引。如果我们不妥协,那么这些问题就没有意义了。