Codeup[10000057]Day of Week

题目要求如下:
在这里插入图片描述虽然题目是英文的,但是可以看出其使用的是格利高里日历。输入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÷4y÷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个字符,然后与对应月份表进行匹配,查看其对应的索引,将其转换为数字。之后使用之前的公式即可轻松计算出对应的在一周中的星期几。
最终通过后的结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值