zoukankan      html  css  js  c++  java
  • 蛤玮准备礼物

    年份相差比较大 , 所以需要特殊处理一下 , 这一道题的数据量比较大 , 不优化的话 , 会超时  . 当程序写好之后 有错误 , 目前没发现 , 明天再看一下 

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<iostream>
     5 #include<limits.h>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<vector>
     9 #include<set>
    10 #include<stack>
    11 #include<string>
    12 #include<sstream>
    13 #include<map>
    14 #include<cctype>
    15 using namespace std;
    16 // 1 , 年份不同的话   计算中间的 年差 , 然后再计算 ,  不完整的年 , 的差
    17 // 2 , 年份相同的话   计算 中间的日期差
    18 bool is_leap_year(int n)
    19 {
    20     if((n%4==0&&n%100!=0)||n%400==0)
    21         return true;
    22     return false;
    23 }
    24 int main()
    25 {
    26     int t,year1,year2,month1,month2,day1,day2,days,a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
    27     scanf("%d",&t);
    28     while(t--)         // 中间 是  从 1900 年 到 100万年  中间的 年数比较多
    29     {
    30         days=0;
    31         scanf("%d%d%d%d%d%d",&year1,&month1,&day1,&year2,&month2,&day2);  // 每四百年 都 是  146097 天 .
    32         if(year1!=year2)
    33         {
    34             int time=max(0,year2-year1-1)/400;  //  有几个四百年  ?
    35             days=time*146097;   // 按照完整的 四百年来说 有这么多天
    36             year1=year1+time*400;               //
    37             for(int i=year1+1;i<year2;i++)
    38             {
    39                 if(is_leap_year(i))
    40                     days+=366;
    41                 else
    42                     days+=365;
    43             }                               //  年份不同的话 , 中间的年份已经处理完毕 .
    44             if(is_leap_year(year1))
    45             {
    46                 for(int i=month1+1;i<=12;i++)
    47                     days+=b[i];
    48                 days+=b[month1]-day1+day2;
    49                 for(int i=1;i<month2;i++)
    50                     days+=b[i];
    51             }
    52             else
    53             {
    54                 for(int i=month1+1;i<=12;i++)
    55                     days+=a[i];
    56                 days+=a[month1]-day1+day2;
    57                 for(int i=1;i<month2;i++)
    58                     days+=b[i];
    59             }                                   //   年份不同的情况处理完毕  .
    60         }
    61         else        //  年份相同的话
    62         {
    63             if(month1==month2)  //  并且 月份 相同的话
    64             {
    65                 days=day2-day1;
    66             }
    67             else            //   年份 相同 处理完毕
    68             {
    69                 if(is_leap_year(year1))
    70                 {
    71                     for(int i=month1+1;i<month2;i++)
    72                         days+=b[i];
    73                     days+=b[month1]-day1+day2;
    74                 }
    75                 else
    76                 {
    77                     for(int i=month1+1;i<month2;i++)
    78                         days+=a[i];
    79                     days+=a[month1]-day1+day2;
    80                 }               //  年份不同处理完毕
    81             }
    82         }
    83         printf("%d
    ",days);
    84     }
    85     return 0;
    86 }
  • 相关阅读:
    Template(模板)模式
    Android活动(Activity)创建及生命周期
    Android--SharedPreferences数据存储方案
    Adapter适配器模式--图解设计模式
    准时制生产(Just in Time,JIT)
    术语
    制造资源计划(Manufacturing Resource Planning,Mrp II)
    Angualr6表单提交验证并跳转
    Android PDA扫描枪广播接搜条码并使用
    Java统计代码行数
  • 原文地址:https://www.cnblogs.com/A-FM/p/5405962.html
Copyright © 2011-2022 走看看