题目-求一个日期是该年中的第几天
输入一个日期,求这个日期是该年中的第几天。
输入格式:
输入三个整数,分别代表年、月、日。(假设数据都是合理的)
输出格式:
这个日期是该年中的第几天。
输入样例:
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() 分支结构。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }