您的位置:首页 > 其它

欧拉工程第19题

2015-04-30 19:46 288 查看
题目链接: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+"毫秒");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: