21xrx.com
2025-03-27 22:30:39 Thursday
文章检索 我的文章 写文章
使用C++的枚举法求星期几的公式
2023-06-27 21:13:45 深夜i     --     --
C++ 枚举法 星期几 公式

枚举法是一种常用的解题方法,可以用来枚举所有可能的解决方案,找到符合要求的最优解。在计算机编程中,枚举法也是一种常见的算法。

本文将介绍使用C++的枚举法求解星期几的公式。

在计算星期几的公式中,我们需要知道一个日期是星期几。以下是计算星期几的公式:

W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1) mod 7

其中,W为星期数,d为当前日期,m为当前月份,y为当前年份。

为了方便计算,在进行枚举法求解过程中,通常采取统一日期格式,例如1970年1月1日为星期四,即W=4。换句话说,我们可以获取1970年1月1日至当前日期的天数差,然后将其转换为星期数。

以下是具体实现:

#include <iostream>
using namespace std;
enum Week
  Monday;
int main() {
  int day, month, year;
  cout << "Enter date (dd mm yyyy): ";
  cin >> day >> month >> year;
  int daysElapsed = day - 1;
  for (int i = 0; i < month - 1; i++) {
    switch (i) {
      case 0:
      case 2:
      case 4:
      case 6:
      case 7:
      case 9:
      case 11:
        daysElapsed += 31;
        break;
      case 3:
      case 5:
      case 8:
      case 10:
        daysElapsed += 30;
        break;
      case 1:
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
          daysElapsed += 29;
        } else {
          daysElapsed += 28;
        }
        break;
    }
  }
  int yearsElapsed = year - 1970;
  int leapYears = ((yearsElapsed - 1) / 4) - ((yearsElapsed - 1) / 100) + ((yearsElapsed - 1) / 400);
  int daysSince1970 = yearsElapsed * 365 + leapYears + daysElapsed;
  Week week = static_cast<Week>((daysSince1970 + 4) % 7);
  switch (week)
    case Sunday:
      cout << "Sunday";
      break;
    case Monday:
      cout << "Monday";
      break;
    case Tuesday:
      cout << "Tuesday";
      break;
    case Wednesday:
      cout << "Wednesday";
      break;
    case Thursday:
      cout << "Thursday";
      break;
    case Friday:
      cout << "Friday";
      break;
    case Saturday:
      cout << "Saturday";
      break;
  
  return 0;
}

上述代码中使用了一个枚举类型Week,其中包含了星期的七个值,即Sunday、Monday、Tuesday、Wednesday、Thursday、Friday和Saturday。在代码中,根据用户输入的日期计算了从1970年1月1日至当前日期的天数差,然后将其转换为星期数。最后,使用switch语句将星期数封装到Week类型中,并打印出对应的星期。

总之,枚举法是一种简单而实用的工具,在计算机编程中也是不可或缺的一种方法。它可以解决许多问题,包括计算星期几的公式。在学习和使用枚举法时,需要注意枚举对象的数量不要过多,以免程序各种开销增大。

  
  

评论区