原题链接:蓝桥杯算法训练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; }//dongdong
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复