解题思路:
输入年份是已知的,既然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; }
0.0分
0 人评分