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

题目:

 黑色星期五

来源:

 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


你可能感兴趣的:(Usaco 1.1.3 黑色星期五(Friday the Thirteenth))