zoukankan      html  css  js  c++  java
  • 题目-求一个日期是该年中的第几天

    题目-求一个日期是该年中的第几天

    输入一个日期,求这个日期是该年中的第几天。

    输入格式

    输入三个整数,分别代表年、月、日。(假设数据都是合理的)

    输出格式

    这个日期是该年中的第几天。

    输入样例

    2000 3 1

    输出样例

    61

    具体分析

    年有闰年和平年,每四年一闰,即闰年的年份都能被 4 整除;

    闰年有 366 天,其中 2 月有29天;平年有 365 天,2 月有 28 天,其余月份的天数平闰年一致;

    即一年的月份天数可表示为:{31, 28 or 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}

    y 年 m 月 d 日是该年中的第 ( 前(m-1)月天数之和 + d ) 天。

    代码(2种)

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int y, m, d, day;        //年、月、日、天数   
     7     cin >> y >> m >> d;
     8     
     9     int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    10     if(y%4 == 0) //闰年 2 月有 29 天  
    11         month[1] = 29;
    12     for(int i=0; i<m-1; i++){
    13         day = day + month[i];
    14     }
    15     cout << day+d << endl;
    16     
    17     return 0;
    18 }

    也可以采用二轮选择得出结果,首轮平闰年分支,次轮月份分支,考虑到有12个月,为整型数据,采用switch() 分支结构。

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int y,m,d;
     6     cin>>y>>m>>d;
     7     if (y%4 != 0)
     8       {
     9         switch ( m )
    10         {
    11               case 1 : cout<<d <<endl;         break;
    12               case 2 : cout<<d+31 <<endl;      break;
    13               case 3 : cout<<d+59 <<endl;      break;
    14               case 4 : cout<<d+90 <<endl;      break;
    15               case 5 : cout<<d+120 <<endl;      break;
    16               case 6 : cout<<d+151 <<endl;      break;
    17               case 7 : cout<<d+181 <<endl;      break;
    18               case 8 : cout<<d+212 <<endl;      break;
    19               case 9 : cout<<d+243 <<endl;      break;
    20               case 10: cout<<d+273 <<endl;      break;
    21               case 11: cout<<d+304 <<endl;      break;
    22               case 12: cout<<d+334 <<endl;      break;
    23         }
    24      }
    25     else
    26     {
    27         switch( m )
    28         {
    29             case 1 : cout<<d <<endl;         break;
    30               case 2 : cout<<d+31 <<endl;      break;
    31               case 3 : cout<<d+60 <<endl;      break;
    32               case 4 : cout<<d+91 <<endl;      break;
    33               case 5 : cout<<d+121 <<endl;      break;
    34               case 6 : cout<<d+152 <<endl;      break;
    35               case 7 : cout<<d+182 <<endl;      break;
    36               case 8 : cout<<d+213 <<endl;      break;
    37               case 9 : cout<<d+244 <<endl;      break;
    38               case 10: cout<<d+274 <<endl;      break;
    39               case 11: cout<<d+305 <<endl;      break;
    40               case 12: cout<<d+335 <<endl;      break;
    41         }
    42     }
    43     return 0;
    44 }
    选择结构,虽然长,但是底层逻辑很简单粗暴
  • 相关阅读:
    DOS命令里面的EQ、NE、GT、LT、GE、LE分别是什么意思
    XCTF-ics-05(文件包含+preg_replace函数/e修正符下的代码执行漏洞)
    BUUCTF-[网鼎杯 2018]Fakebook(SSRF+联合注入绕Waf)
    [WesternCTF2018]shrine(SSTI+过滤)
    XCTF-simple unpack
    vulnhub-靶机Lampiao
    BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf)+[极客大挑战 2019]LoveSQL(联合注入)
    XCTF-open-source
    [CISCN2019 华北赛区 Day2 Web1]Hack World(二分法写布尔注入脚本)
    CTF中的序列化与反序列化
  • 原文地址:https://www.cnblogs.com/yuanchuying/p/14754530.html
Copyright © 2011-2022 走看看