• 算法提高 日期计算


    http://lx.lanqiao.org/problem.page?gpid=T265

    算法提高 日期计算  
    时间限制:1.0s   内存限制:256.0MB
        
    问题描述
      已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。
    输入格式
      输入只有一行
      YYYY MM DD
    输出格式
      输出只有一行
      W
    数据规模和约定
      1599 <= YYYY <= 2999
      1 <= MM <= 12
      1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期
      1 <= W <= 7,分别代表周一到周日
    样例输入
    2011 11 11
    样例输出
    5
     
    分析:
    以某一个点为参照,向前或者向后计算,注意闰年2月的计算。
     
    AC代码:
     
     1 #include<iostream>
     2 #include <stdio.h>
     3 #include<cmath>
     4 using namespace std;
     5 
     6 bool leap(int year)
     7 {
     8     if(year%4==0&&year%100!=0)
     9     return true;
    10     if(year%400==0)
    11     return true;
    12     return false;
    13 } 
    14 
    15 int getYD(int year)
    16 {
    17     int sum=0;
    18     int i;
    19     if(year<=2011)
    20     {
    21         for(i=year;i<2011;i++)
    22         {
    23             if(leap(i))
    24             sum+=366;
    25             else
    26             sum+=365;    
    27         }
    28     }
    29     if(year>2011)
    30     {
    31         for(i=2011;i<year;i++)
    32         {
    33             if(leap(i))
    34             sum+=366;
    35             else
    36             sum+=365;
    37         }
    38     }
    39     return sum;
    40 }
    41 
    42 int getMD(int year,int mon,int day)
    43 {
    44     int i;
    45     int sum=0;
    46     for(i=1;i<mon;i++)
    47     {
    48         if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
    49         sum+=31;
    50         if(i==4||i==6||i==9||i==11)
    51         sum+=30;
    52         if(i==2&&leap(year))
    53         sum+=29;
    54         if(i==2&&!leap(year))
    55         sum+=28;
    56     }
    57     sum=sum+day-1;
    58     return sum;
    59 }
    60 
    61 
    62 
    63 int main()
    64 {
    65     //freopen("1.in ", "r" , stdin);
    66     //freopen("1.out" , "w" , stdout);
    67 
    68     int year,mon,day,sum;
    69     while(cin>>year>>mon>>day)
    70     {
    71         sum=getYD(year);
    72         //cout<<getMD(year,mon,day)<<endl;;
    73         if(year<2011)
    74         {
    75             sum=sum-getMD(year,mon,day);
    76             //cout<<sum<<endl;
    77             cout<<(sum%7==6?7:abs(6-(sum%7)))<<endl;
    78         }
    79         else
    80         {
    81             sum=sum+getMD(year,mon,day);
    82             //cout<<sum<<endl;
    83             cout<<((6+(sum%7))>7?((6+(sum%7))%7):(6+(sum%7)))<<endl;
    84         }
    85         
    86         
    87     }
    88     return 0;
    89 }
    View Code
  • 相关阅读:
    蒟蒻の搜索学习总结
    蒟蒻の红黑树总结
    数据结构与算法
    linux常用命令
    Linux防火墙Firewall和Iptables的使用
    Spring Boot 自定义Intercepter
    Spring Boot 自定义Filter
    SpringBoot 全局异常配置
    SpringBoot设置支持跨域请求
    springboot整合shiro安全框架
  • 原文地址:https://www.cnblogs.com/jeff-wgc/p/4450718.html
Copyright © 2020-2023  润新知