五行山下的悟空

题目来源:http://116.56.140.75:8000/JudgeOnline/problem.php?id=1711

1711: 五行山下的悟空

时间限制: 1 Sec 内存限制: 64 MB

题目描述

《西游记》的故事可谓家喻户晓。孙悟空桀骜不驯,大闹天宫,搅得玉皇大帝不可终日,如来佛祖降服了悟空,将他压在五行山(又称五指山)下。如来的五指山其实叫做五行山,乃如来將五指化作金、木、水、火、土五座联山。悟空不知熬过了多少个寒冬酷暑、多少次斗转星移,其中的痛苦寂寞难以言状,漫长的岁月磨掉他的野性,练就他的面对困难的坚强意志。悟空清楚地记得,被压在五行山下的那天是某年某月某日,他通过询问过往的路人能得知今天是何年何月何日了,那么他已经被关押了多少天了了呢?悟空扳指计算,口中念念有词,一遍又一遍地倒手指。手指倒得发酸发软,嘴巴念得口干舌燥。这还不是最糟糕的,有时,一不小心倒错了手指或念错了数,只好重来,如此反复无数遍,费了很大的气力才算出了。不过,这样也好,正好打发了他那漫长无聊的时光。坚持就是胜利,最后,悟空等来了观音的搭救,辅佐唐僧去西天取经,终于修成正果。

申明:图片来自电视剧《西游记》第一部56.com网络视频截屏。

现在,想请你编程帮助悟空实现计算。

输入

输入包含2行。第一行表示被关押的到五行山的年月日。第一行表示表示他询问路人得到的当日的年月日。这两个日期都是合乎公历历法中的公元元年元月1日之后的日期,并且第一个日期一定小于等于第二个日期。

输出

输出占三行。第一行输出它被关押的天数(包含被压的当天和询问的当天)。第2,3行分别输出被押当天和询问当天各是星期几。周日至周六分别用英文的单词表示,即为Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday。

样例输入

1 1 1
501 1 1

样例输出

182622
Monday
Saturday

提示

计算星期几的时候要根据现在的日期和星期几来推算。

解析:都已经有提示了,解析就不多说了

代码:

#include<iostream> 
using namespace std; 
bool check(int y) 
{ 
    if (y % 100 == 0) 
    { 
        if (y % 400 == 0) 
            return 1; 
        else
            return 0; 
    } 
    else
    { 
        if (y % 4 == 0) 
            return 1; 
        else
            return 0; 
    } 
} 
int main() 
{ 
    int mon1[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; 
    int mon2[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 }; 
    int y1, m1, d1; 
    int y2, m2, d2; 
    cin >> y1 >> m1 >> d1; 
    cin >> y2 >> m2 >> d2; 
    long long int sum = 0, count = 0; 
    if (check(y1) == false) 
    { 
        for (int i = 0; i < m1 - 1; i++) 
            sum -= mon1[i]; 
        sum -= d1; 
    } 
    else
    { 
        for (int i = 0; i < m1 - 1; i++) 
            sum -= mon2[i]; 
        sum -= d1; 
    } 
    for (int i = y1; i < y2; i++) 
    { 
        if (check(i) == false) 
            sum += 365; 
        else
            sum += 366; 
    } 
    if (check(y2) == false) 
    { 
        for (int i = 0; i < m2 - 1; i++) 
            sum += mon1[i]; 
    } 
    else
    { 
        for (int i = 0; i < m2 - 1; i++) 
            sum += mon2[i]; 
    } 
    cout << sum + d2 + 1 << endl; 
    for (int i = 1; i < y1; i++) 
    { 
        if (check(i) == false) 
            count += 365; 
        else
            count += 366; 
    } 
    if (check(y1) == false) 
    { 
        for (int i = 0; i < m1 - 1; i++) 
            count += mon1[i]; 
    } 
    else
    { 
        for (int i = 0; i < m1 - 1; i++) 
            count += mon2[i]; 
    } 
    count += d1; 
    if (count % 7 == 1) 
        cout << "Monday" << endl; 
    else if (count % 7 == 2) 
        cout << "Tueday" << endl; 
    else if (count % 7 == 3) 
        cout << "Wednesday" << endl; 
    else if (count % 7 == 4) 
        cout << "Thursday" << endl; 
    else if (count % 7 == 5) 
        cout << "Friday" << endl; 
    else if (count % 7 == 6) 
        cout << "Saturday" << endl; 
    else
        cout << "Sunday" << endl; 
    count += (sum + d2); 
    if (count % 7 == 1) 
        cout << "Monday" << endl; 
    else if (count % 7 == 2) 
        cout << "Tueday" << endl; 
    else if (count % 7 == 3) 
        cout << "Wednesday" << endl; 
    else if (count % 7 == 4) 
        cout << "Thursday" << endl; 
    else if (count % 7 == 5) 
        cout << "Friday" << endl; 
    else if (count % 7 == 6) 
        cout << "Saturday" << endl; 
    else
        cout << "Sunday" << endl; 
    return 0; 
} 
/************************************************************** 
    Problem: 1711 
    User: 201730685257 
    Language: C++ 
    Result: 正确 
    Time:0 ms 
    Memory:1484 kb 
****************************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值