题目要求如下:
虽然题目是英文的,但是可以看出其使用的是格利高里日历。输入1个日期,求出对应的日期在一周内是周几。
这里直接使用基姆拉尔森计算公式进行计算,其公式如下:
W = ( d + 2 × m + 3 × ( m + 1 ) ÷ 5 + y + y ÷ 4 − y ÷ 100 + y ÷ 400 + 1 ) W= (d+2\times m+3\times (m+1)\div 5+y+y\div 4-y\div 100+y\div 400+1)%7 W=(d+2×m+3×(m+1)÷5+y+y÷4−y÷100+y÷400+1)
有时间再进行相应公式的推断。
下面是对应实现的代码:
#include <stdio.h>
#include <string.h>
int get_index(char arr[][4], char *s, int length) {
//获取对应的索引
int i = -1;
for (int j = 0; j < length; ++j) {
if (strcmp(arr[j], s) == 0) {
i = j;
break;
}
}
return i;
}
int main(int argc, char const *argv[]) {
int year, month, day;
char m[12] = {0};
char months[12][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
char weekdays[7][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday","Sunday"};
while (scanf("%d %s %4d", &day, &m, &year) != EOF) {
char _m[4] = {0};
//截取3个字符
strncpy(_m, m, 3);
month = get_index(months, _m, 12) + 1;
if (month == 1 || month == 2) {
month += 12;
year--;
}
int w;
w = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
printf("%s\n", weekdays[w]);
}
return 0;
}
我们对输入的月份截取3个字符,然后与对应月份表进行匹配,查看其对应的索引,将其转换为数字。之后使用之前的公式即可轻松计算出对应的在一周中的星期几。
最终通过后的结果: