警示后人注意边界问题
查看原帖
警示后人注意边界问题
496840
SAMSHAWCRAFT楼主2024/10/4 16:52

如果你 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)
2024/10/4 16:52
加载中...