编程统计:从1900年1月1日(星期一)开始经过的n年当中,每个月的13号这一天是星期一、星期二、星期三、.....、星期日的次数分别是多少?
输入文件:一行,一个整数n(1《=n《=400)
输出文件:一行7个整数,以空格相隔,(一次是星期一、星期二、星期三、.......、星期日的次数)。
样例:
输入:1
输出:1 3 1 2 2 2 1
用Pascal编,不要求准确率,有程序就可以,火速帮忙!谢谢!
编程统计:从1900年1月1日(星期一)开始经过的n年当中,每个月的13号这一天是星期一、星期二、星期三、.....、星期日的次数分别是多少?
输入文件:一行,一个整数n(1《=n《=400)
输出文件:一行7个整数,以空格相隔,(一次是星期一、星期二、星期三、.......、星期日的次数)。
样例:
输入:1
输出:1 3 1 2 2 2 1
用Pascal编,不要求准确率,有程序就可以,火速帮忙!谢谢!
此乃usaco1.1原题:“Friday the Thirteenth ”。
以下程序转自NOCOW。
program xx;
const a:array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31);
var n,i,j,t:longint;
b:array[0..6] of longint;
begin
readln(n);t:=0;
for i:=1900 to 1900+n-1 do
begin
if (i mod 400=0)or((i mod 4=0)and(i mod 100<>0)) then a[2]:=29 else a[2]:=28;
for j:=1 to 12 do
begin
inc(b[(t+13) mod 7]);
inc(t,a[j]);
end;
end;
writeln(b[6],' ',b[0],' ',b[1],' ',b[2],' ',b[3],' ',b[4],' ',b[5]);
end.
在Delphi里编译通过,结果正确。
uses SysUtils,DateUtils; var n: Integer; CurDate:TDateTime; i,j: Integer; one,two,three,four,five,six,seven: Integer; curn: Integer; begin one:= 0; two:= 0; three:= 0; four:= 0; five:= 0; six:= 0; seven:= 0; curn:= 1900; Readln(n); for i:= 0 to n do begin curn:= 1900 + i; for j:= 1 to 12 do begin CurDate:= EncodeDate(curn,j,13); case DayOfTheWeek(CurDate) of 1: inc(one); 2: Inc(two); 3: inc(three); 4: inc(four); 5: inc(five); 6: Inc(six); 7: inc(seven); end; end; end; Writeln(inttostr(one) + ' ' + inttostr(two) + ' ' + inttostr(three) + ' ' +inttostr(four) + ' ' + inttostr(five) + ' ' +inttostr(six) + ' ' + inttostr(seven)); Readln; end.