原题链接:蓝桥杯算法训练VIP-黑色星期五
解题思路: 通过输入日期判断距离指定日期的天数,再根据天数判断星期几;
注意事项: 闰年的2月份会多一天;
参考代码:
#include <iostream>
using namespace std;
int arr[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//保存每月的最后一天
int week[]={0,1,2,3,4,5,6,7};
int check(int j)
{
arr[2]=28; //非闰年,2月28天,若为闰年,重新赋值为29即可
if(j%4==0&&j%100!=0||j%400==0)//闰年处理,2月份为29天
{
arr[2]=29;
return 366;
}
return 365;
}
int main()
{
int year,time=0,cnt=0;
cin>>year;
for(int i=1998;i<year;i++)
{
time+=check(i);//过去的几年相加,闰年加366,平年加365
}
for(int j=1;j<=12;j++)//今年,遍历每个月
{
check(year);
for(int k=1;k<=arr[j];k++)//遍历每一天
{
time+=k;//这个月的号数代表这个月的天数,直接相加即可,下一次计算的时候记得清理掉之前加的号数
if(k==13&&week[(time+3)%7]==5)//1998,1,1第一天,星期四,天数和星期数,数值上相差 3 ,即第一天的星期数为week[4]=4且号数 k = 13 (号);
{
cnt++;
}
if(k<arr[j])//统计完过后,要清理这一天,重新计算天数的时候要减去上一天的号数,如 1998,1,26(25-25+26=26天),而下一个月从1号开始,故上一个月的最后一天不用减,1998,2,1(31+1=32天)
time-=k;
}
}
cout<<cnt<<endl;
return 0;
}//dongdong0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复