题解 | #Day of Week#
Day of Week
https://www.nowcoder.com/practice/a3417270d1c0421587a60b93cdacbca0
#include <iostream> using namespace std; int dayTable[2][13] = { //预处理 { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; bool IsLeapYear(int year) { //判断是否为闰年 return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } string monthName[13] = { "", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; string weekName[7] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; void sample2_3_7() { int a, b, c; // char str[9]; string str; while (cin>>c>>str>>a) { int number = 0; for (int i = 1; i <= 13; ++i) { if (str == monthName[i]) { b = i; break; } } if (a < 1923) { for (int i = a + 1; i < 1923; i++) { if (IsLeapYear(i)) { number += 366; } else { number += 365; } } int row = IsLeapYear(a); for (int i = 12; i > b; i--) { number += dayTable[row][i]; } number += dayTable[row][b] - c; cout<<weekName[(7 - number) % 7]; // switch (number % 7) { // case 0: // printf("周日\n"); // break; // case 1: // printf("周六\n"); // break; // case 2: // printf("周五\n"); // break; // case 3: // printf("周四\n"); // break; // case 4: // printf("周三\n"); // break; // case 5: // printf("周二\n"); // break; // case 6: // printf("周一\n"); // break; // } } else { for (int i = 1923; i < a; i++) { if (IsLeapYear(i)) { number += 366; } else { number += 365; } } int row = IsLeapYear(a); for (int i = 1; i < b; i++) { number += dayTable[row][i]; } number += c; printf("%s", weekName[number % 7].c_str()); // switch (number % 7) { // case 0: // printf("周日\n"); // break; // case 1: // printf("周一\n"); // break; // case 2: // printf("周二\n"); // break; // case 3: // printf("周三\n"); // break; // case 4: // printf("周四\n"); // break; // case 5: // printf("周五\n"); // break; // case 6: // printf("周六\n"); // break; // } } } } int main() { void sample2_3_7(); sample2_3_7(); } // 64 位输出请用 printf("%lld")