>>292 元日と大晦日で曜日が同じ年は、まとめれるんじゃね?って適当な考えで、適当に書いてみた。
import java.util.ArrayList;
public class Q292 {
private static final String[] WEEK_STR = {"日", "月", "火", "水", "木", "金", "土"};
public static int zeller(int year, int month, int day) {
if (month == 1 || month == 2) { month += 12; year--; }
return (year + year/4 - year/100 + year/400 + (13*month+8)/5 + day) % 7;
}
public static void main(String[] args) {
ArrayList[][] use = new ArrayList[7][7];
for (int dayOfNewYearsDay = 0; dayOfNewYearsDay < 7; dayOfNewYearsDay++)
for (int dayOfNewYearsEve = 0; dayOfNewYearsEve < 7; dayOfNewYearsEve++)
use[dayOfNewYearsDay][dayOfNewYearsEve] = new ArrayList();
for (int year = 2005; year <= 2104; year++)
use[zeller(year, 1, 1)][zeller(year, 12, 31)].add(new Integer(year));
int total = 0;
for (int dayOfNewYearsDay = 0; dayOfNewYearsDay < 7; dayOfNewYearsDay++) {
for (int dayOfNewYearsEve = 0; dayOfNewYearsEve < 7; dayOfNewYearsEve++) {
ArrayList al = use[dayOfNewYearsDay][dayOfNewYearsEve];
if (!al.isEmpty()) {
System.out.println("1月1日の曜日: "+WEEK_STR[dayOfNewYearsDay]+"曜日");
System.out.println("12月31日の曜日: "+WEEK_STR[dayOfNewYearsEve]+"曜日");
System.out.print("使用年数: "+al.size()+"年 ( ");
for(int i=0; i<al.size(); i++) System.out.print(al.get(i)+" ");
System.out.println(")\n");
total++;
}
}
}
System.out.println("合計: "+total+"枚必要");
}
}