java戦闘13:月曜日
ブルーブリッジカップ第9回ジャワ州選手権グループA2。
元のタイトル:
タイトル:月曜日
20世紀を通して(1901年1月1日から2000年12月31日まで)、月曜日は何回ありましたか?
(今日が何日かわからないと言わないでください)
注:提出する必要があるのは整数のみであり、余分なコンテンツや説明テキストを入力しないでください。
アイデア:最初に1901年1月1日の曜日を決定し、次に2000年12月31日の曜日を決定します。この質問では、月曜日の数を尋ねられます。1901年1月1日は火曜日、2000年12月31日は日曜日、したがって、合計日数を7で割り、残りの日数は6です。たまたま少ない日は月曜日です。7で割り、四捨五入して、月曜日の合計日数である週数を取得します。 。。この質問で水曜日の日数を尋ねる場合、週数は+1でなければなりません。
コードは次のように表示されます。
public class province_2 {
public static void main(String[] args) {
//先判断1901年1月1日是周几,2000年12月31日是周几。
calculateWeek c1=new calculateWeek(1901,1,1);
calculateWeek c2=new calculateWeek(2000,12,31);
//因为算出一个是周六一个是周日。这其中包含几个周一,就可以直接看这其中一共有几个完整的周就可以了。
int sum=0;int y=1901;int d;
while(y>=1901&&y<=2000) {
if(y%400==0||(y%4==0&&y%100!=0)) {
d=366;
}
else {
d=365;
}
sum+=d;
y++;
}
System.out.println(sum/7);
}
}
class calculateWeek{
public calculateWeek(int y,int m,int d){
int Week;
if(m==1||m==2) {
m+=12;y--;
}
Week= (d + 2 * m + 3 * (m + 1) / 5 + y + y/4 - y/100 + y/400) % 7; ;
switch(Week) {
case 0:System.out.println("周一");break;
case 1:System.out.println("周二");break;
case 2:System.out.println("周三");break;
case 3:System.out.println("周四");break;
case 4:System.out.println("周五");break;
case 5:System.out.println("周六");break;
case 6:System.out.println("周日");break;
}
}
}
演算結果: