[USACO1.1]黑色星期五Friday the Thirteenth-洛谷 1202

题目描述

13号又是一个星期五。13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数。给出N年的一个周期,要求计算190011日至1900+N-11231日中十三号落在周一到周日的次数,N为正整数且不大于400.

这里有一些你要知道的:

1190011日是星期一.

24,6,119月有30天.其他月份除了2月都有31天.闰年2月有29天,平年2月有28天.

3、年份可以被4整除的为闰年(1992=4*498 所以 1992年是闰年,但是1990年不是闰年).

4、以上规则不适合于世纪年。可以被400整除的世纪年为闰年,否则为平年。所以,1700,1800,19002100年是平年,而2000年是闰年.

请不要调用现成的函数

请不要预先算好数据(就是叫不准打表)!

输入输出格式

输入格式:
一个正整数n.

输出格式:
输入输出样例

输入样例#1:
20
输出样例#1:
36 33 34 33 35 35 34

题解:这一道题不断枚举就行了。

var
  i,j,n:integer;
  day:longint;
  week:array[0..6] of integer;
begin
  read(n);
  day:=0;
  for i:=1900 to 1900+n-1 do
    for j:=1 to 12 do
       case j of
        1,2,4,6,8,9,11:if (i=1900) and (j=1) then
                            begin
                               day:=day+13;
                               week[day mod 7]:=week[day mod 7]+1;
                            end else begin
                               day:=day+31;
                               week[day mod 7]:=week[day mod 7]+1;
                            end;
        3:if (i mod 4=0) and (i mod 100<>0) or (i mod 400=0) then
                              begin
                                day:=day+29;
                                week[day mod 7]:=week[day mod 7]+1;
                              end else 
                              begin
                                day:=day+28;
                                week[day mod 7]:=week[day mod 7]+1;
                              end;
        5,7,10,12:begin day:=day+30;week[day mod 7]:=week[day mod 7]+1;end;
       end;
    write(week[6],' ');
    for i:=0 to 5 do write(week[i],' ');
    writeln;
 end. 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值