黑色星期五c语言程序,[蓝桥杯][算法训练VIP]黑色星期五 (C语言代码)

解题思路:

输入年份是已知的,既然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

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值