题解 | Day of Week
Day of Week
https://www.nowcoder.com/practice/a3417270d1c0421587a60b93cdacbca0
#include <stdio.h>
#include <string.h>
int isLeapyear(int year){
if(((year%4==0)&&(year%100!=0)) || (year%400==0)){
return 1;
}else{
return 0;
}
}
char* is_week_day(int year, char month_str[10], int day){
int days = 0;
char month_mapping[13][10] = {"", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
int month;
int month_days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char week_day_mapping[7][10] = {"Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"};
// 年
for(int i=0; i<year; i++){
days += isLeapyear(i)==1 ? 366 : 365;
}
// 月
// 转换为数字
for(int i=1; i<=12; i++){
if(strcmp(month_str, month_mapping[i])==0){
month = i;
break;
}
}
// 天数累加
for(int i=0; i<month; i++){
if(i==2){
days += isLeapyear(year)==1 ? 29 : month_days[i];
continue;
}
days += month_days[i];
}
// 天
days += day;
// 星期计算
int week_day = days%7;
return week_day_mapping[week_day];
}
int main() {
int year1, month1, day1;
char month1_str[10];
while(scanf("%d %s %d", &day1, month1_str, &year1) != EOF){
char week_day1[10];
strcpy(week_day1, is_week_day(year1, month1_str, day1));
printf("%s\n", week_day1);
}
return 0;
}


