愿尔安然无恙


私信TA

用户名:H2130819045

访问量:13777

签 名:

向往星辰大海,喜欢落日晚风。

等  级
排  名 63
经  验 10711
参赛次数 16
文章发表 56
年  龄 20
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

不想改bug ^_^

解题思路:  通过输入日期判断距离指定日期的天数,再根据天数判断星期几; 

注意事项:  闰年的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 人评分

  评论区

  • «
  • »