Friday the Thirteenth黑色星期五

本文介绍了一个程序,用于计算在指定年数内,13日落在星期一至星期日的次数,特别关注了黑色星期五(13号在星期五)的出现频率。

 Friday the Thirteenth黑色星期五


13 号又是星期五是一个不寻常的日子吗?
13 号在星期五比在其他日少吗?为了回答这个问题,写一个程序来计算在 n 年里 13 日落在星期一,星期二......星期日的次数.这个测试从 1900年1月1日到1900+n-1 年 12 月 31 日.n 是一个非负数且不大于 400.
这里有一些你要知道的:

1900年1月1 日是星期一. 
4,6,11和9月有30 天.其他月份除了 2 月有 31 天.闰年 2 月有 29 天,平年 2 月有 28 天. 
年份可以被 4 整除的为闰年(1992=4*498 所以 1992 年是闰年,但是 1990 年不是闰年) 
以上规则不适合于世纪年.可以被 400 整除的世纪年为闰年,否则为平年.所以,1700,1800,1900 和2100 年是平年,而2000 年是闰年. 
请不要预先算好数据!  

PROGRAM NAME: friday
INPUT FORMAT
一个整数 n.
SAMPLE INPUT (file friday.in) 
20
OUTPUT FORMAT
七个在一行且相分开的整数,它们代表 13 日是星期六,星期日,星期一.....星期五的次数.
SAMPLE OUTPUT (file friday.out)
36 33 34 33 35 35 34

====================

==========

{
ID:jie19952
PROG:friday
LANG:PASCAL
}

const
  day:array[1..12]of longint=(31,28,31,30,31,30,31,31,30,31,30,31);
var
  n:longint;
  ans:array[1..7]of longint;
  
procedure init;
begin
  assign(input,'friday.in');
  assign(output,'friday.out');
  reset(input); rewrite(output);
end;

procedure terminate;
begin
  close(input); close(output);
  halt;
end;

procedure main;
var
  year,date,week,rest:longint;
  i:longint;
  flag:boolean;
begin
  readln(n);
  year:=1899;
  date:=31; week:=7;
  fillchar(ans,sizeof(ans),0);
  
  repeat
    inc(year);
    
    if ((year mod 100=0)and(year mod 400=0))or ((year mod 100<>0)and(year mod 4=0))
      then flag:=true
      else flag:=false;

    date:=day[12]-date+13;
    week:=(week+date) mod 7;
//    if week=0 then week:=1;
    date:=13;
   // writeln(year,' ',date,' ',week);
    
    inc(ans[week]);
    
    for i:=2 to 12 do //枚举月份
      begin
        if (i=3) and flag then
          begin
            date:=day[i-1]+1-date+13;
            week:=(week+date) mod 7;
//            if week=0 then week:=1;
            date:=13;
           // writeln(year,' ',date,' ',week);
            inc(ans[week]);
          end
          else begin
                 date:=day[i-1]-date+13;
                 week:=(week+date) mod 7;
//                 if week=0 then week:=1;
                 date:=13;
                 //writeln(year,' ',date,' ',week);
                 inc(ans[week]);
               end;
      end;
  until year=1900+n-1;
  
  write(ans[6],' ');
  write(ans[0],' ');
  for i:=1 to 4 do
    write(ans[i],' ');
  writeln(ans[5]);
end;

begin
  init;
  main;
  terminate;
end.


 

 

《Thomas微积分早期超越函数论,第十三版》是一本深受欢迎的教材,用于大学微积分课程。它被广泛用于讲授微积分的基本概念和技巧,旨在帮助学生理解微积分以及其在数学和实际应用中的重要性。 这本教材的第十三版是对之前版本的改进和更新。它首先介绍了基本的微积分原理,如导数和积分,然后深入讲解了微分和积分的应用,例如微分方程和曲线的长度和面积计算。此外,该书还介绍了多元函数、向量值函数和曲线及曲面积分等高级主题。 与之前的版本同,这本书采用了现代化的教学方法和创新的教学工具。它包含了大量的图表、插图和实例,以便帮助学生更好地理解概念,并直观地应用所学知识。此外,书中还包含了习题和练习题,以便学生加深对概念和技巧的理解,并提供自我评估的机会。 这本教材在教学界享有很高的声誉,被广泛使用。它清晰明了地解释了微积分的关键概念,并给出了实际应用的例子,使学生能够将所学的知识应用到实际问题中。此外,书中还附有解答和附录,方便学生查阅。 总之,《Thomas微积分早期超越函数论,第十三版》是一本全面、易于理解且实用的教材,适用于学习微积分的任何学生。无论是对于希望深入了解微积分的专业学生,还是对于对数学感兴趣的非数学专业学生,这本书都是一本可多得的学习资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值