一、题目
二、解题
1.思路
根据给定的年份和天数计算出对应的月份和日期。下面是它的具体思路:
- 定义一个二维整型数组M,其中第一行表示闰年中每个月的天数,第二行表示平年中每个月的天数。
- 创建一个函数leap(),用于判断给定的年份是否为闰年。它的具体实现方式是,若该年能被4整除但不能被100整除,或者能被400整除,则判定为闰年,并返回true;否则返回false。
- 主函数中,首先从标准输入中读入年份和天数。
- 检查该年是否为闰年,并将结果保存在变量y中。
- 创建一个变量sum,用于记录天数之和,初始化为0。
- 利用循环遍历每个月,判断天数是否已经超过给定的天数。如果是,将该月份保存在变量m中,并退出循环;否则将当前月份天数累加到sum中。
- 输出所得到的月份m,以及给定天数与前m-1个月天数之和的差值。
下面使用一个具体的例子说明代码的执行过程。输入年份为2023,天数为75。首先检查该年是否为闰年,发现不是,因此y的值为0。接下来开始遍历每个月,从1月开始,累加天数。1月有31天,sum变为31;2月有28天(因为不是闰年),sum变为59;3月有31天,sum变为90,此时超过了给定天数,因此保存当前月份m为3,并输出3和75-59=16,即3月16日。
2.代码
dev c++ 5.11
#include<iostream>
using namespace std;
int M[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
bool leap(int year){
return ((year%4==0 && year%100!=0) || year%400==0 );
}
int main(){
int year,day,sum=0,m;
cin>>year>>day;
int y=leap(year);
for(int i=1;i<13;i++){
if((sum+M[y][i])>=day){
m=i;
break;
}else{
sum+=M[y][i];
}
}
cout<<m<<endl<<day-sum<<endl;
return 0;
}
3.提交结果
总结
月份小技巧
int M[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
bool leap(int year){
return ((year%4==0 && year%100!=0) || year%400==0 );
}