2007下半年程序员考试题目.求助!
已知1900年1月1日是星期一,下面的函数count_5_13(int year)用于计算给定的年份year中有几个“黑色星期五”。“黑色星期五”指既是13日又是星期五的日期。函数count_5_13(int year)首先算出年份year的1月13日是星期几,然后依次计算每个月的13日是星期几,若是星期五,则计数。
程序中使用了函数isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为1(或0)分别表示year是(或不是)闰年。
[C语言函数]
int isLeapYear( int year)
{
if(year%4==0 && year%100!=0 || year%400==0)
return 1;
else
return 0;
}
int count_5_13(int year)
{ int date;
long days = 0;
int m,y,c=0;
if(year < 1900)
return -1;
days = 12;
for (y = 1900; y < year; y++)
{days += 365;
if (isLeapYear(y))
days++;
}
date = ((days % 7) + 1) % 7;
c = (date==5) ? 1 : 0;
for(m = 1; m < 12; m++)
{switch (m)
{case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days = 31; break;
case 4: case 6: case 9: case 11:
days = 30; break;
case 2: days = 28;
if (year%4==0 && year%100!=0 || year%400==0) days = 29;
break;
}/* end of switch*/
date =((days % 7) + date ) % 7;
if (date == 5)
c++;
}
return c;
}
main()
{
int YEAR,jishu;
scanf("%d",&YEAR);
jishu=count_5_13(YEAR);
printf("%d",jishu);
getch();
}
...................................................
1.date = ((days % 7) + 1) % 7;
2.date =((days % 7) + date ) % 7;
这2个语句看不明白.?
----------------解决方案--------------------------------------------------------
1.date = ((days % 7) + 1) % 7;是求第y年的1月13是星期几
2.date =((days % 7) + date ) % 7;是求第y年的(m+1)月13是星期几
----------------解决方案--------------------------------------------------------
楼上的答案不错.....仔细分析就能得到答案...
----------------解决方案--------------------------------------------------------