Usaco 1.1.3 黑色星期五(Friday the Thirteenth)

本文详细讲解了Usaco编程竞赛中1.1.3题——黑色星期五的解题思路与Pascal语言实现,涉及日期计算和条件判断,适合初学者提升算法技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

 黑色星期五

来源:

 Usaco1.1.3

题目大意:

 求1900年到之后N年,13号在星期一至七出现的次数

数据范围:

 N<=400

样例:

 20
36 33 34 33 35 35 34

做题思路:

 貌似方法不少,我采用的比较偷懒,就是直接套蔡勒公式

知识点:

 模拟、蔡勒公式

{
ID:Dount Nameless
TASK:friday
LANG:PASCAL
}
var
 w:array[0..6]of longint;
 n,c,y,m,d,i,j,k,tim:longint;
begin
 assign(input,'friday.in');reset(input);
 assign(output,'friday.out');rewrite(output);
 readln(n);
 d:=13;
  fori:=1900 to 1900+n-1 do
  begin
   for j:=1 to 12 do
    begin
     if j<3 then
      begin
     m:=j+12;{<前三个月等于去年的后三个月,这样倒下才能应用蔡勒公式>}
     c:=(i-1)div 100;
     y:=(i-1)mod 100;
     end
     else
     begin
     c:=i div 100;
     y:=i mod 100;
     m:=j;
     end;
     inc(w[((y+y div 4+c div 4-2*c+(26*(m+1)div 10)+d-1)mod 7+7)mod 7]);{<蔡勒公式>}
    end;
  end;
  write(w[6],' ',w[0],' ');
  fori:=1 to 4 do
  write(w[i],' ');
 writeln(w[5]);
 close(input);close(output);
end.
题目来源: http://ace.delos.com/usacoprob2?a=YqYGTaSaabV&S=friday


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值