zoukankan      html  css  js  c++  java
  • 【乱搞】【AOJ-59】09年3月选拔赛第4题

    Description
    最近图书馆的工作人员在检查馆藏书目的时候发现,有很多书籍久久没有被借书人归还。于是工作人员决定给这些不负责任的借书人发信件通知他们来图书馆归还书籍并缴纳罚款(会有用吗?)。现在请你为图书馆工作人员编写程序,以计算每个不归还书籍的借书者借书天数。
    Input
    第一行输入为三个正整数y m d,分别代表现在的年、月、日;
    第二行输入为一个正整数n,代表下面有多少个借书者信息;
    下面有n行输入,每行有三个正整数yy mm dd, 代表一个借书者借书的日期(年、月、日)。
    年份数据的范围为[1, 9999]

    Output
    输出共有n行,每行输出一个正整数,代表对应的借书者借书天数。
    Sample Input
    1 1 1
    3
    1 1 1
    1 1 31
    1 2 28
    
    

     
    Sample Output
    0
    30
    58
    
    
    思路:
    1、如果是同一年,通过算出当前日期是此年的第几天,然后相减得出
    2、如果不是同一年,则中间相隔y1-y2-1个完整的年,通过循环判断是否为闰年,如果是则+366天,否则+365天
    结束循环后判断其实和结束年是否为闰年,然后加上366||365-起始年的第几天,再加上末尾年的第几天
     PS:神经质般的用了__int64...
    参考代码:
    #include <stdio.h>
    #include <stdlib.h>
    __int64 wtd(int year,int month,int day);//求出是某年的第几天
    int is_run(int year);//判断是否为闰年
    int main()
    {
        int y,m,d;
        int yy,mm,dd;
        int n,i;
        __int64 day=0;
        scanf("%d%d%d",&y,&m,&d);
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d%d%d",&yy,&mm,&dd);
            if(y==yy)
            {
                day=wtd(yy,mm,dd)-wtd(y,m,d);
            }
            else
            {
                for(i=1;i<yy-y;i++)
                {
                    if(is_run(y+i))
                        day+=366;
                    else
                        day+=365;
                }
                if(is_run(y))
                    day+=366-wtd(y,m,d);
                else
                    day+=365-wtd(y,m,d);
                day+=wtd(yy,mm,dd);
            }
            printf("%I64d
    ",day);
            day=0;
        }
        
        return 0;
    }
    
    __int64 wtd(int year,int month,int day)
    {
    
        int i;
        __int64 sum=0;
        if(is_run(year))
        {
            for(i=1;i<month;i++) 
            { 
                if(i==2) 
                    sum+=29; 
                else if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) 
                    sum+=31; 
                else
                    sum+=30; 
            } 
            sum+=day; 
        } 
        else
        { 
            for(i=1;i<month;i++) 
            { 
                if(i==2) 
                    sum+=28; 
                else if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) 
                    sum+=31; 
                else
                    sum+=30; 
            } 
            sum+=day; 
        } 
        return sum;
    }
    
    int is_run(int year)
    {
        if((year%4==0&&year%100!=0)||year%400==0)
            return 1;
        else 
            return 0;
    }
     
  • 相关阅读:
    Struts2声明式异常处理
    几种常用的过滤器
    Jdk 和 Tomcat的 安装。(旧版本,请看新版本3篇)
    java 判断字符串是否相等
    PreparedStatement 查询 In 语句 setArray 等介绍。
    String、StringBuffer与StringBuilder之间区别
    IntelliJ IDEA 里 查看一个函数注释的方法是 ctrl+q
    Java字符串拼接效率对比
    Java 中判断字符串是否为空
    IntelliJ IDEA + Tomcat ;On Upate Action 与 On Frame Deactivation
  • 原文地址:https://www.cnblogs.com/ahu-shu/p/3465831.html
Copyright © 2011-2022 走看看