【问题标题】:Check if number has its digits in order检查数字是否按顺序排列
【发布时间】:2018-10-24 08:29:50
【问题描述】:

我正在尝试检查,给定任何数字,其数字是否按顺序排列。示例:

1479 -> 是的

1293 -> 错误

在 Haskell 中是否有合适的方法来做到这一点?我是这门语言的新手,现在真的很迷茫。谢谢。

【问题讨论】:

  • 好吧,看起来您分两步执行此操作(a)获取各个数字,以及(b)检查这些是否有序。
  • 我找到了第一步的方法:digits:: Integral x => x -> [x] digits 0 = [] digits x = listaDigitos (x div 10) ++ [x mod 10]. 第二步有什么线索吗?谢谢。
  • 使用zip 获取每两个连续数字,然后检查all 的项目是否包含digit <= nxt_digit

标签: sorting haskell int digits


【解决方案1】:

我认为@vps 方法足够合适,但对于某些种类,您也可以按以下方式完成工作;

Prelude> and $ zipWith (<) <*> tail $ show 1479
True
Prelude> and $ zipWith (<) <*> tail $ show 1293
False

【讨论】:

    【解决方案2】:

    我的想法是这样的:

    ordenado n
       | mod n 10 > mod (div n 10) 10 = ordenado (div n 10)
       | n == 0 = True
       | otherwise = False
    

    【讨论】:

      【解决方案3】:

      您可以将其转换为字符串并使用简单的递归和模式匹配。

         checkInOrder :: Int -> Bool
         checkInOrder x = isInOrder $ show x
      
         isInOrder :: (Ord a) => [a] -> Bool    
         isInOrder [] = True
         isInOrder [x] = True
         isInOrder (x:y:xs) = (x < y) && (isInOrder (y:xs))
      
         main = print (checkInOrder 1234) 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        • 2012-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多