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 }
    选择结构,虽然长,但是底层逻辑很简单粗暴
  • 相关阅读:
    每日问题汇总:2016-3-28
    DataList、Repeater、GridView中的Checkbox取值问题
    长数字字符串逗号分隔
    文字环绕图片效果
    js图片放大镜 可动态更换图片
    动态页面生成静态页
    SQL按汉语拼音首字母排序
    JS软键盘代码
    JS判断RadioButtonList是否有选中项
    简单获取两个时间的时间差函数
  • 原文地址:https://www.cnblogs.com/yuanchuying/p/14754530.html
Copyright © 2011-2022 走看看