USACO Training Page、金曜日13日 問題は、1990年1月1日から1990年12月31日+ N-1(Nが与えられている)の13日が毎週上陸する頻度を計算すると言います。 1990年1月1日は月曜日であり、うるう年が考慮されます。プログラムは土曜日の13日の数字を、金曜日までの日曜日の13日の数字を印刷する必要があります。 私のコードでこの問題を見つけることができないようで、数日前から試してみました。 EDITは - Nのための私の出力は= 20がそれをすることになっています37 34 35 34 36 36 35私のUSACO Friday the 13th solutionの問題は何ですか?
ある あなたはプログラムの日付関数を使用することを許可されていない36 33 34 33 35 35 34
import java.io.*;
class friday {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new FileReader("friday.in"));
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("friday.out")));
int N = Integer.parseInt(in.readLine());
int[] monthDays = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int firstdayNo=2;
int THIRdayNo;
int[] counter = new int[8];
Arrays.fill(counter, 1);
for (int j=1900; j<1900+N;j++) {
if (j%4==0 && j%100 !=0 || j%400==0) {
monthDays[2]=29;
}
else {
monthDays[2]=28;
}
for (int i=1; i<13; i++) {
if (firstdayNo==2) {
THIRdayNo=7;
}
else {
THIRdayNo=(firstdayNo+12)%7;
}
counter[THIRdayNo]++;
firstdayNo= (monthDays[i]%7) +firstdayNo;
if (firstdayNo>7) {firstdayNo=firstdayNo-7;}
// to here, and you are done
}
}
out.println(+counter[7]+" "+ counter[1]+" "+counter[2]+" "+ counter[3]+ " "+counter[4]+" "+counter[5]+" "+counter[6]);
in.close();
out.close();
System.exit(0);
}
}
何かがここで間違っている「金曜日の土曜日に13thsを番号を印刷する必要があります」:私は金曜日の缶は、土曜日に起こってくるか想像することはできません。 –
申し訳ありませんが、私はそれを修正しました – MathmagicalWasp