欧拉工程第19题

题目链接:https://projecteuler.net/problem=19
求:1901-2000年内,每月的一号是星期天的总天数。
注意题目:
1.1901年开始
2.星期日
3.题目说1900.1.1是星期一,求解的不是星期一,也不是从1900年开始的

思路:
1.年,月,是否星期日,主要这三个就好了。
2.判断是不是闰年
3.从1901年开始
4.先找出每个月的1号距1900年1.1有多少天,判断能不能被7整除,整除+1

package projecteuler11to20;

import java.util.Date;
class level19{
    void solve(){
        int starYear=1900;
        int endYear=2000;
        int sumSunday=0;
        int DaysMonth=0;
        int DaysYear=0;
        for(int year=starYear;year<=endYear;year++){
            for(int month=1;month<=12;month++){
                if(year==1900 && month==1){
                    sumSunday=0;
                }else{
                    DaysMonth=DaysYear+getDaysMonthFirst(year,month);
                    if(year>=1901 && DaysMonth%7==0){
                        sumSunday+=1;
                    }
// System.out.println(DaysMonth+" :"+DaysMonth%7 +":"+getDaysMonthFirst(year,month)+":"+getYearDays(year));
                }
            }
            DaysYear=DaysYear+getYearDays(year);
// System.out.println("New Year");
        }
        System.out.println("1901-2000年每月的第一天是周日的个数:"+sumSunday);
    }
    int getDaysMonthFirst(int year,int month){
        int days=0;
        int months[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        if(month>=3&&JudgeLeapYear(year)==true){
            months[2]+=1;
        }
        for(int i=0;i<month;i++){
            days+=months[i];
        }
        days+=1;
        return days;
    }
    int getYearDays(int year){
// int months[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        boolean flag=JudgeLeapYear(year);
        if(flag==true){
            return 366;
        }else{
            return 365;
        }
    }
    boolean JudgeLeapYear(int year){
        boolean flag=false;
        if (year%400 == 0 || (year%4 == 0 && year%100 != 0)){
            flag=true;
        }
        return flag;
    }
}
public class Problem19 {

    public static void main(String[] args){
        Date beginTime=new Date();
        new level19().solve();//171
        Date endTime=new Date();
        long Time = endTime.getTime()-beginTime.getTime();
        System.out.println("Time:"+Time/1000+"秒"+Time%1000+"毫秒");
    }
}

你可能感兴趣的:(欧拉工程第19题)