如果你 WA 在第一个测试点,而后面的测试点却通过了,请检查你的代码当中有没有判断当前的 x 是否大于等于斐波纳契数列当前被比较的项。
错误示范:
findPairsFor :: Int -> IO ()
findPairsFor x = testPairsAtIndex x 3
where
testPairsAtIndex :: Int -> Int -> IO ()
testPairsAtIndex _ 88 = return ()
testPairsAtIndex x i
| mod (x - fibs ! (i - 1)) (fibs ! (i - 2)) == 0 = putStrLn(show (i - 1) ++ " " ++ show (1 + div (x - fibs ! (i - 1)) (fibs ! (i - 2)))) >> testPairsAtIndex x (i + 1)
| otherwise = testPairsAtIndex x (i + 1)
正确示范:
findPairsFor :: Int -> IO ()
findPairsFor x = testPairsAtIndex x 3
where
testPairsAtIndex :: Int -> Int -> IO ()
testPairsAtIndex _ 88 = return ()
testPairsAtIndex x i
| x < fibs ! (i - 1) = return ()
| mod (x - fibs ! (i - 1)) (fibs ! (i - 2)) == 0 = putStrLn(show (i - 1) ++ " " ++ show (1 + div (x - fibs ! (i - 1)) (fibs ! (i - 2)))) >> testPairsAtIndex x (i + 1)
| otherwise = testPairsAtIndex x (i + 1)