欧拉工程第19题

来源:互联网 发布:身份证号码找人软件 编辑:程序博客网 时间:2024/06/07 21:46

题目链接: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+"毫秒");    }}
0 0