解题思路:
输入年份是已知的,既然1998年1月1日是星期四,随后的某年某月某日是星期几,可用函数来计算。首先需要知道,从1998年到某年,过了多少年,每过一年要加上366天(闰年)或365天;然后是到某月之前过了多少月,若为1、3、5、7、8、10、12月,每月加上31天,若有闰年的二月,加上29天,若非闰年的二月,加上28天,其余月份,每月加上30天;再加上某月的天数,加3除以7取余,计算当天是星期几。输入年份,看其每个月的13号是否是星期五,并为黑色星期五计数。

注意事项:
从1998年1月1日开始,到某年某月某日过了多少天,用这个天数加3修正、除7取余,求得星期数,用0表示星期天,用1~6表示星期一到星期六。

参考代码:

#include<stdio.h>
int main(){
    int is_leap_year(int);      //是否为闰年
    int year_days(int);         //某年的天数
    int month_days(int,int);    //某年某月的天数
    int week(int,int,int);      //某年某月某日是星期几
    int y,m,c=0;
    scanf("%d",&y);
    for(m=1;m<=12;m++)          //一年内的每个月
        if(week(y,m,13)==5)     //若13号是星期五
            c++;                //又出现了一次黑色星期五
    printf("%d\n",c);
    return 0;
}
int is_leap_year(int year){
    return (year%4==0&&year%100!=0||year%400==0)?1:0;
}
int year_days(int year){
    return is_leap_year(year)?366:365;
}
int month_days(int year,int month){
    int days;
    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
        days=31;
    else if(month==2){
        if(is_leap_year(year)) days=29;
        else days=28;
    }else days=30;
    return days;
}
int week(int year,int month,int day){
    day+=3;
    while(--month) day+=month_days(year,month);
    while(1998!=year--) day+=year_days(year);
    return day%7;
}


点赞(6)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论