跑步训练
#include <iostream>
using namespace std;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int leap(int year)
{
if (year%100!=0&&year%4==0||year%400==0) return 1;
return 0;
}
int main()
{
int ans=0;
int w=6;
int y,m,d;
for ( y=2000;y<=2020;y++) //先暴力枚举年份
{
for (m=1;m<=12;m++) //再暴力枚举月份
{
for ( d=1;d<=month[m]+(m==2?leap(y):0);d++,w=(w+1)%7) //再暴力枚举每天,注意特判一下闰年且月份为2的情况
{
ans++;
if (w==1||d==1) ans++;
if (y==2020&&m==10&&d==1) //结束条件
{
cout<<ans<<endl;
return 0;
}
}
}
}
return 0;
}
日期计算
写法1
#include <iostream>
#include <cstdio>
using namespace std;
int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool leap(int year) //判断是否是闰年
{
if ((year%4==0&&year%100!=0)||year%400==0) return true;
return false;
}
int get_day(int year,int month) //获取某个月的天数
{
if (month!=2) return months[month];
else
{
if (leap(year)) return 29;
else return 28;
}
}
int main()
{
int year,day;
cin>>year>>day;
int cnt=0; //记录已经过去了多少天
for (int i=1;i<=12;i++) //遍历月份
{
for (int d=1;d<=get_day(year,i);d++) //遍历每个月的天数
{
cnt++;
if (cnt==day)
{
printf("%d\n%d\n",i,d);
return 0;
}
}
}
return 0;
}
写法2
#include <iostream>
#include <cstdio>
using namespace std;
int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool leap(int year) //判断是否是闰年
{
if ((year%4==0&&year%100!=0)||year%400==0) return true;
return false;
}
int get_day(int year,int month) //获取某个月的天数
{
if (month!=2) return months[month];
else
{
if (leap(year)) return 29;
else return 28;
}
}
int main()
{
int year,day;
cin>>year>>day;
int month=1;
int cnt=0; //记录已经过去了多少天
while (day--)
{
cnt++;
if (cnt>get_day(year,month)) month++,cnt=1;
}
printf("%d\n%d\n",month,cnt);
return 0;
}