Day of Week

Day of Week

http://www.nowcoder.com/questionTerminal/a3417270d1c0421587a60b93cdacbca0

这个题就是考察蔡勒公式。
W=[C/4]-2C+y+[y/4]+[26(m+1)/10]+d-1 (其中[ ]为取整符号)
注意:
1、 C是年份的前两位数
y是年份的后两位数
m是月份
d是日
2、需要注意的是如果月份是一月二月,则需看成是上一年的13月,14月,所以月份不是1-12,而是3-14。
3、W算出来的数有可能是负数,这是需要将他加上一个较大的7的倍数,然后进行取余。
4、也就是说W:0-6,然后根据取值选择星期。

#include <iostream>
#include<string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int inf=70000;
int main(int argc, char** argv) {
    char month[15][10]={{"0"},{"0"},{"0"},{"March"},{"April"},{"May"},{"June"},{"July"},{"August"},{"September"},{"October"},{"November"},{"December"},{"January"},{"February"}};
    char week[7][10]={{"Sunday"},{"Monday"},{"Tuesday"},{"Wednesday"},{"Thursday"},{"Friday"},{"Saturday"}};
    int y;
    int d;
    int m;
    int w;
    char mon[10];
    scanf("%d%s%d",&d,&mon,&y);
    for(int i=3;i<15;i++){
        if(strcmp(month[i],mon)==0){
            m=i;
            break;
        }
    }
    if(m>=13){
        y--;
    }
    int C=y/100;
        y=y-(y/100)*100;
    w=(C/4)-2*C+y+(y/4)+(26*(m+1)/10)+d-1;        
    if(w>7)
        w%=7;
    if(w<0)
    {
        w=(w+inf)%7;

    }
    printf("%s",week[w]);
    return 0;
}
全部评论
倒数第二个if应该是w>=7吧?
点赞 回复 分享
发布于 2024-02-29 18:43 山西

相关推荐

東大沒有派對:这是好事啊(峰哥脸
我的秋招日记
点赞 评论 收藏
分享
评论
21
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务