问题描述:
有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不大吉利,用古人的说法
就是“诸事不宜”。请你编写一个程序,统计出在某个特别的年份中,出现多少次既是13号又是星期
五的情形,以帮助你的迷信朋友解决问题。
tip:1.一年有365天,闰年有366天,所谓闰年,指能被4整除不能被100整除的年份。或是既能被
100整除也能被400整除的年份;
2.已知1998年1月1日是星期四,用户输入的年份必须大于或等于1998年。
输入格式:
输入只有一行,即某个特定的年份(大于或等于1998年)
输出格式:
输出只有一行,即在这一年中,出现多少次即是13号又是星期五的情况。
样例输入:
1998
样例输出:
3
#include <stdio.h>
int getweekoffirstday(int y){ //获取将要求得那一年的第一天是星期几
int i=1998,week=3;
int days=0;
for(i=1998;i<y;i++){
if(i%400==0||(i%4==0&&i%100!=0))
days+=366;
else
days+=365;
}
return (days+week)%7;
}
void print(int y){
int day[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
int week=getweekoffirstday(y);
int flag=y%400==0||(y%4==0&&y%100!=0)?1:0;//如果y为闰年,flag=1;
int times=0,i,days=0;
for(i=0;i<12;i++){
if((days+12+week)%7==4)
times++;
days+=day[flag][i];
}
printf("%d",times);
}
int main (){
int y;
scanf("%d",&y);
print(y);
return 0;
}
分类标签:
算法练习 日期 模拟 数组 循环结构