zoukankan      html  css  js  c++  java
  • hdu 6112 今夕何夕

    今夕何夕

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 690    Accepted Submission(s): 211


    Problem Description
    今天是2017年8月6日,农历闰六月十五。

    小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨。

    为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。

    小贴士:在公历中,能被4整除但不能被100整除,或能被400整除的年份即为闰年。
     
    Input
    第一行为T,表示输入数据组数。

    每组数据包含一个日期,格式为YYYY-MM-DD。

    1 ≤ T ≤ 10000

    YYYY ≥ 2017

    日期一定是个合法的日期

     
    Output
    对每组数据输出答案年份,题目保证答案不会超过四位数。
     
    Sample Input
    3 2017-08-06 2017-08-07 2018-01-01
     
    Sample Output
    2023 2023 2024
     
    思路:模拟年份变化即可,注意特判的情况
    AC代码:
    #define _CRT_SECURE_NO_DEPRECATE
    #include<iostream>
    #include<stdio.h>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<vector>
    #include<cstring>
    #include<string>
    #include<cmath>
    using namespace std;
    
    int year, month, day;
    
    bool judge(int year) {//判断闰年
        if ((!(year % 4) && (year % 100)) || !(year % 400))return true;
        return false;
    }
    bool if_run = 0, if_hou = 0, special_judge = 0;
    int main() {
        int t;
        scanf("%d", &t);
        while (t--) {
            scanf("%d-%d-%d", &year, &month, &day);
            special_judge = 0;
            if (judge(year)) {
                if_run = true;
                if (month == 2 || month == 1)if_hou = false;
                else if_hou = true;
                if (month == 2 && day == 29)special_judge = 1;
            }
            else {
                if_run = false;
                if (month == 2 || month == 1)if_hou = false;
                else if_hou = true;
            }
            int sum = 0;
            while (1) {
                if (!special_judge) {
                    if (if_run) {
                        if (if_hou) {
                            sum += 365 % 7;
                            if (!(sum % 7))break;
                        }
                        else {//非后面月份
                            sum += 366 % 7;
                            if (!(sum % 7))break;
                        }
                    }
                    else {//非闰年
                        if (if_hou) {
                            if (judge(year + 1)) {
                                sum += 366 % 7;
                                if (!(sum % 7))break;
                            }
                            else {
                                sum += 365 % 7;
                                if (!(sum % 7))break;
                            }
                        }
                        else {//非后面月份
                            sum += 365 % 7;
                            if (!(sum % 7))break;
                        }
    
                    }
                    year++;
                    if (judge(year))if_run = 1;
                    else if_run = 0;
                }
                else {//特判
                    if (judge(year + 4)) { sum += (365 * 3 + 366) % 7; if (!(sum % 7))break; }
                    else sum += (365 * 4) % 7;
                    year += 4;
                }
            }
    
            if (special_judge) { year += 4; printf("%d
    ", year); }
            else printf("%d
    ", ++year);
        }
        return 0;
    }
  • 相关阅读:
    不要为自己找借口,你可以做到的--职场实用做人法则
    sql server 利用发布订阅方式实现数据库同步问题
    关于免费空间的寻找
    数据自定义格式化
    C++字符串string类常用操作详解(一)【初始化、遍历、连接】
    C++ 命名空间
    gcc/g++ 如何支持c11 / c++11标准编译
    正确的C++/C堆栈
    linux下清空c++ cin无效流的方式
    32位64位下各种数据类型大小的对比
  • 原文地址:https://www.cnblogs.com/ZefengYao/p/7351353.html
Copyright © 2011-2022 走看看