【问题标题】:How to determine which day of a year belongs to what month? [closed]如何判断一年中的哪一天属于哪一个月? [关闭]
【发布时间】:2013-03-25 03:07:47
【问题描述】:

我是初学者,我必须用 SML 编写一个函数。

作业题是:

编写一个名为 what_month 的函数,它以一天的数字(例如,257,假设一年 365 天)作为输入,并返回这一天所属的月份。

示例:what_month(40) 应返回 2(2 月)。

【问题讨论】:

  • 你知道如何手工制作吗?一旦你想出了一个算法,它应该很容易转化为 ML。
  • 我把算法写在一个.txt文件中,但是我不知道如何在页面中上传,请您指导我吗?

标签: functional-programming sml


【解决方案1】:

对于简单的情况(不考虑闰年),您可以定义以月为单位的日期列表months_days,以及一个递归辅助函数aux,它需要一个名为intsum和一个称为 numbersint list ,并返回一个 int n 使得列表的第一个 n 元素添加到小于 sum,但列表的第一个 n + 1 元素添加到sum 或更多。

val month_days= [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

fun what_month(day :int) =
 let  
   fun aux(sum :int,  numbers: int list) =
    let
      val numbers_tail = tl numbers
    in
      if sum <= (hd numbers)
      then 1
      else    
        1 + aux(sum, (hd numbers + hd numbers_tail)::(tl numbers_tail))
    end
 in
   aux(day, month_days)
 end

【讨论】:

  • 它有效...非常感谢,Tarrsalah。
  • 我还有一个问题,Tarrsalah,我想你可以帮助我,所以请检查一下,我正在等待,再次感谢
【解决方案2】:

这样做的一种方法是创建一个每个月有多少天的列表。

这样的列表可能是这样的

days_in_month = [31, 28, 31, 30, ...]

然后您可以根据每个月的天数轻松倒数您输入的数字。当您到达的数字小于下个月的天数时,输入的数字必须属于您到达的月份。

请注意,这不考虑闰年。但是,如果需要的话,这也不应该那么难。

【讨论】:

  • 我看不出你对那个评论的看法。
  • 我的这个功能的问题已经解决了,谢谢 Jesper,你的解决方案很有用。我还有一个问题,如果可能,请检查并帮助我,再次感谢
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多