`
xxx0624
  • 浏览: 31658 次
文章分类
社区版块
存档分类
最新评论

HDU4545+计算日期

 
阅读更多
/*
计算过了D天后的日期
之前D天的日期
*/
#include<stdio.h>
int judge_year( int year ){
    if( (year%4==0&&year%100!=0)||(year%400==0) )
        return true;
    else
        return false;
}
int judge_month( int mon ){
    if( mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12 ) 
        return true;
    else
        return false;
}
int main(){
    int ca;
    //freopen("cmp.txt","w",stdout);
    scanf("%d",&ca);
    while( ca-- ){
        int n;
        scanf("%d",&n);

        int year,mon,day;
        year = 2013;
        mon = 3;
        day = 24;
        int sum = n;
        while( sum>0 ){
            if( judge_year(year)==true ){
               
                //printf("sum=%d,,year = %d,mon=%d,day=%d\n",sum,year,mon,day);
                    if( mon==2 ){
                        int left = 29-day;
                        if( sum>left ){
                            sum = sum-(left+1);
                            mon++;
                            day = 1;
                                        }
                        else if( sum==left ){
                            sum = 0;
                            day = 29;
                                    }
                        else {
                            day += sum;
                            sum = 0;
                        }    
                    }
                    else if( judge_month( mon )==true ){
                        int left = 31-day;
                        if( sum>left ){
                            sum = sum-left-1;
                            mon++;
                            if( mon>12 ) {
                                year++;
                                mon = 1;
                            }
                            day = 1;
                        }
                        else if( sum==left ){
                            sum = 0;
                            day = 31;
                        }
                        else{
                            day += sum;
                            sum = 0;
                        }
                    }
                    else {
                        int left = 30-day;
                        if( sum>left ){
                            sum = sum-left-1;
                            mon++;
                            if( mon>12 ) {
                                year++;
                                mon = 1;
                            }
                            day = 1;
                        }
                        else if( sum==left ){
                            sum = 0;
                            day = 30;
                        }
                        else{
                            day += sum;
                            sum = 0;
                        }
                    }
                
            }//闰年
            else{
                
                    if( mon==2 ){
                        int left = 28-day;
                        if( sum>left ){
                            sum = sum-left-1;
                            mon++;
                            day = 1;
                        }
                        else if( sum==left ){
                            sum = 0;
                            day = 28;
                        }
                        else {
                            day += sum;
                            sum  = 0;
                        }    
                    }
                    else if( judge_month( mon )==true ){
                        int left = 31-day;
                        if( sum>left ){
                            sum = sum-left-1;
                            mon++;
                            if( mon>12 ) {
                                year++;
                                mon = 1;
                            }
                            day = 1;
                        }
                        else if( sum==left ){
                            sum = 0;
                            day = 31;
                        }
                        else{
                            day += sum;
                            sum = 0;
                        }
                    }
                    else {
                        int left = 30-day;
                        if( sum>left ){
                            sum = sum-left-1;
                            mon++;
                            if( mon>12 ) {
                                mon = 1;
                                year++;
                            }
                            day = 1;
                        }
                        else if( sum==left ){
                            sum = 0;
                            day = 30;
                        }
                        else{
                            day += sum;
                            sum = 0;
                        }
                    }
                
            }//不是闰年
            if( sum<=0 ) 
                break;
        }//向后D天的日期

        printf("%04d/%02d/%02d ",year,mon,day);
        year = 2013;
        mon = 3;
        day = 24;
        sum = n;
        while( sum>0 ){
            if( judge_year( year )==true ){
                if( sum>=366 ){
                    sum-=366;
                    year--;
                }
                else{
                    if( mon==3 ){
                        int left = day;
                        if( sum>=29 ){
                            sum-=29;
                            mon--;
                        }
                        else {
                            if( sum==left-1 ){
                                sum = 0;
                                day = 1;
                            }
                            else if( sum<left-1 ){
                                day -= sum;
                                sum = 0;
                            }
                            else {
                                sum -= left;
                                day = 29;
                                mon--;
                            }
                        }
                    }
                    else if( mon==5||mon==7||mon==10||mon==12 ){
                        int left = day;
                        if( sum>=30 ){
                            sum-=30;
                            mon--;
                        }
                        else {
                            if( sum==left-1 ){
                                sum = 0;
                                day = 1;
                            }
                            else if( sum<left-1 ){
                                day -= sum;
                                sum = 0;
                            }
                            else {
                                sum -= left;
                                day = 30;
                                mon--;
                            }
                        }
                    }
                    else {
                        int left = day;
                        if( sum>=31 ){
                            sum-=31;
                            mon--;
                            if( mon<=0 ){
                                year--;
                                mon=12;
                            }
                        }
                        else {
                            if( sum==left-1 ){
                                sum = 0;
                                day = 1;
                            }
                            else if( sum<left-1 ){
                                day -= sum;
                                sum = 0;
                            }
                            else {
                                sum -= left;
                                day = 31;
                                mon--;
                                if( mon==0 ){
                                    mon = 12;
                                    year--;
                                }
                            }
                        }
                    }
                }
            }//闰年
            else {
                if( sum>=365 ){
                    sum-=365;
                    year--;
                }
                else{
                    if( mon==3 ){
                        int left = day;
                        if( sum>=28 ){
                            sum-=28;
                            mon--;
                        }
                        else {
                            if( sum==left-1 ){
                                sum = 0;
                                day = 1;
                            }
                            else if( sum<left-1 ){
                                day -= sum;
                                sum = 0;
                            }
                            else {
                                sum -= left;
                                day = 28;
                                mon--;
                            }
                        }
                    }
                    else if( mon==5||mon==7||mon==10||mon==12 ){
                        int left = day;
                        if( sum>=30 ){
                            sum-=30;
                            mon--;
                        }
                        else {
                            if( sum==left-1 ){
                                sum = 0;
                                day = 1;
                            }
                            else if( sum<left-1 ){
                                day -= sum;
                                sum = 0;
                            }
                            else {
                                sum -= left;
                                day = 30;
                                mon--;
                            }
                        }
                    }
                    else {
                        int left = day;
                        if( sum>=31 ){
                            sum-=31;
                            mon--;
                            if( mon==0 ){
                                year--;
                                mon=12;
                            }
                        }
                        else {
                            if( sum==left-1 ){
                                sum = 0;
                                day = 1;
                            }
                            else if( sum<left-1 ){
                                day -= sum;
                                sum = 0;
                            }
                            else {
                                sum -= left;
                                day = 31;
                                mon--;
                                if( mon==0 ){
                                    mon = 12;
                                    year--;
                                }
                            }
                        }
                    }
                }
            }//不是闰年
            if( sum<=0 ) break;
        }

        printf("%04d/%02d/%02d\n",year,mon,day);
    }
    return 0;
}

分享到:
评论

相关推荐

    hdu 300+ AC 代码

    HDU 300+ AC 代码集合是一个包含超过300个已通过验证的算法解决方案的资源,这些代码主要用于解决各类计算机编程竞赛中的问题。这些竞赛通常由杭州电子科技大学(HDU)主办,旨在提升参赛者的算法设计、编程和问题...

    HDUc++上机测试真题(错题汇集1

    在C++编程语言中,`new`和`delete`是两个关键的操作符,它们与C语言中的`malloc`和`free`有所不同。`new`不仅分配内存,还会根据指定的类型调用对应的构造函数来初始化对象,而`malloc`仅仅分配内存,不涉及对象的...

    HDU刷题地图+精选详细笔记

    本人准备2020年保研机试时刷的题目(虽然最后机试取消了,...来自某中流985,在HDU和vjudge平台上大概刷了400道。本文件地图(excel表格)包含了绝大部分我刷过的题目,笔记中具有思路、代码、总结和心得。 大佬勿入!

    HDU+2000-2099+解题报告

    HDU(杭州电子科技大学)在线评测系统是许多编程竞赛爱好者和学习者经常访问的平台,它提供了大量的算法题目供用户练习和挑战。这个压缩包文件“HDU 2000-2099 解题报告”显然包含了在这个题号范围内的一些问题、...

    HDU+2000-2099+解题报告.zip

    在HDU OnlineJudge中,题目通常涉及了算法竞赛中常见的问题类型,如图论、动态规划、贪心算法、排序与搜索、字符串处理、数学计算等。解题报告中的每一道题目都提供了详尽的解题思路,旨在帮助参赛者理解和掌握各种...

    hdu+acm课件

    最后,"HDU+ACM课件"可能是一个综合性的课件集合,涵盖了ACM竞赛的各种主题,包括数据结构、算法、问题解决策略等。这是一份全面的学习资料,对于系统性地学习ACM知识非常有价值。 通过学习这些文件,你可以深入...

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

    hdu.rar_hdu

    HDU(杭州电子科技大学在线评测系统)是一个深受程序员喜爱的在线编程练习平台,它提供了丰富的算法题目供用户挑战,帮助他们提升编程技能和算法理解能力。"hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在...

    hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj

    【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...

    hdu1250高精度加法

    ### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...

    HDU题目java实现

    【标题】"HDU题目java实现"所涉及的知识点主要集中在使用Java编程语言解决杭州电子科技大学(HDU)在线评测系统中的算法问题。HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案...

    ACM hdu 线段树题目+源代码

    ACM hdu 线段树题目+源代码 线段树是一种非常重要的数据结构,它广泛应用于算法竞赛和实际编程中。今天,我们将通过 ACM hdu 的几个题目来学习和掌握线段树的基本概念和应用。 线段树的基本概念 线段树是一种...

    HDU DP动态规划

    动态规划通常用于优化多阶段决策过程,通过将问题分解为更小的子问题并存储子问题的解来避免重复计算,从而提高效率。 【描述】提到的"HDU的一题"可能是指HDU(杭州电子科技大学)在线判题系统中的一道动态规划题目...

    hdu 1695 GCD(欧拉函数+容斥原理).docx

    "hdu 1695 GCD(欧拉函数+容斥原理)" 题目大意是:给定 a, b, c, d, k,找到一队 x, y,满足 g(x, y) = k,且 x ∈ [1, b], y ∈ [1, d],问有多少对符合要求的 (x, y)。 思路是:gcd(x, y) == k 解释 x, y 都能...

    ACM HDU题目分类

    ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。这些分类将有助于编程选手更好地理解和解决问题。 DP 问题 DP(Dynamic Programming,动态规划)是一种非常重要...

    hdu 2000 -2099 题集

    这些题目来自于杭州电子科技大学的在线评测系统HDU的题集,涵盖了从2000到2009的编号。这些题目旨在测试编程者的基本算法理解、数学计算能力以及问题解决技巧。以下是对这些题目中涉及知识点的详细解释: 1. **2000...

    HDU ACM 2005第几天 txt格式

    根据给定文件的信息,我们可以分析出这是一道与计算日期相关的算法题目,主要涉及的是如何确定一年中的第几天。下面将详细解释此题目的背景、算法思路以及代码实现。 ### 背景介绍 该题目来自HDU ACM(浙江工业...

    HDU1059的代码

    HDU1059的代码

    hdu1001解题报告

    hdu1001解题报告

    hdu 1574 passed sorce

    hdu 1574 passed sorce

Global site tag (gtag.js) - Google Analytics