题目描述
给你4个整数a,b,c,y,代表y年的a月的第b个星期c,输出这个日期
如果这个日期不存在,那么就是输出none
样例
4 2 7 2018
4 1 7 2018
2 5 4 2018
2 4 3 2018
2018/04/08
2018/04/01
none
2018/02/28
思路
由题目可知 1850 年 1月1日是星期二
那么我们就可以根据当前给的时间来计算与上面那个时间的差值+1然后%7来计算是星期几
这里可以设置一个数组来代表是星期几:
int weekday[7]={1,2,3,4,5,6,7};
比如1月1日与它自己相减加1为1
week[1]=2;
//伪码
int c;//差值
c%=7;
weekday[c]//代表是星期几
这里的话当然没有直接给出具体日期,但是具体到了月份,就可以先计算到那个月1号 的差值,然后,在根据后面的值来计算具体是多少号,
int month[13] ={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int day=0;
for(int i=1850;i<y;i++){
if(run(i))day+=366;
else day+=365;
}
if(run(y))month[2]=29;
else month[2]=28;
for(int i=i=1;i<a;i++)day+=month[i];
day=(day+1)%7;
c-=1;//这里的c代表星期c在weekday数组中的位置
int x=0;//具体是多少号
if(c>=day){
x=(b-1)*7+(c-day);
}
else {
x=7-day+c+(b-1)*7;
}
x+=1;//这里可以想一下为什么要+1
判断条件
if(x>month[a]||x<=0)puts("none");
else printf("%04d/%02d/%02d\n",y,a,x);
emmmm,具体代码就不给出了,因为这个我也是参照大佬的代码来写的,而且上面的代码理解了就可以自己写出代码来了,上面写的是我觉得自己觉得很困惑的地方,如果有什么不足的地方,请大家指出,谢谢大家