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

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

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

输入格式

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

输出格式

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

输入样例

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 }
选择结构,虽然长,但是底层逻辑很简单粗暴
原文地址:https://www.cnblogs.com/yuanchuying/p/14754530.html