【问题标题】:Is there an algorithm for finding a day of a week (Sunday, Monday, etc.)?是否有一种算法可以找到一周中的某一天(周日、周一等)?
【发布时间】:2021-01-01 21:16:07
【问题描述】:

是否有一种算法可以用日期(日和月,无年份)查找一周中的某一天(星期日、星期一等),同时仅使用一年的开始日(1.1 将是:周日、周一...)?

【问题讨论】:

  • 您需要知道年份才能准确找到 2 月 28 日之后的任何一天。
  • 给定 M 月和 D 日,将 M 之前所有月份的天数相加。然后添加 D-1 以获取自 1 月 1 日以来的总天数。然后计算 total%7 + 1 并得到星期几,其中 1=Sun,2=Mon,等等。例如,给定 3 月 10 日,我们有 sum=31+28total=sum+10-1=68。所以weekday=68%7+1=6 这是星期五。查看 2023 年的日历,您会发现 1 月 6 日和 3 月 10 日都是星期五。 (注意:正如 Mark 已经提到的,将前几个月的天数相加是有问题的,因为 2 月有 28 天或 29 天,具体取决于年份。)
  • 你能同意谁让你这样做吗,今年的第一天 (1.1) 是 3 月 1 日?否则,不。

标签: c


【解决方案1】:

是否有一种算法可以在仅使用一年中的开始日的情况下找到一周中的某一天...带有日期(日和月,no年)... **

前 2 个月可以。提示:以(starting_day + 31*(Month==Feb) + day)%7开头。

不,适用于 3 月 1 日或之后的几天。代码需要知道年份是否为闰年。

【讨论】:

    【解决方案2】:

    算法是:

    1. 创建一个类似int sumDaysOfMyDate( int date[2] ); 的函数,其中包含一个类似int daysInMonth[12] = {31, 28, 31...}; 的数组,以计算到给定日期的天数总和。 (我认为日期存储在 2 个整数的数组中:一个代表当天,一个代表月份)
    2. 取和的模 7 并将其用作数组 char *days[7] = {"Saturday", "Sunday", "Monday"...}; 的索引。就是这样。

    帮助您形象化

    printf("%s\n", days[sumDaysOfMyDate(date)%7]);
    

    所有这一切都假设 1 月 1 日是星期日,正如我从你的这部分问题中猜到的那样:“1.1 将是:星期日,星期一...)”;假设二月有 28 天。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多