欧拉计划网第十九题解决办法——两种方案

题目19:20世纪有多少个星期日是当月的第一天?

以下是一些已知信息,但是或许你需要自己做一些其他的调查。

  • 1900年1月1日是星期一。
  • 30天的月份有:9月,4月,6月,11月。
  • 此外的月份都是31天,当然2月除外。
  • 2月在闰年有29天,其他时候有28天。
  • 年份可以被4整除的时候是闰年,但是不能被400整除的世纪年(100的整数倍年)除外。

20世纪(1901年1月1日到2000年12月31日)一共有多少个星期日落在了当月的第一天?

解决问题源程序:

import java.text.SimpleDateFormat;
import java.util.Calendar;


public class num19 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		
		System.out.println(getDay(1900,2000));
	    System.out.println(findSundays());
	}

	/**
	 * 计算1901年1月1日到2000年12月31日一共有多少天
	 */
	public static int getDay(int x,int y){
		
		int sum=0,count=0;
		for(int i=x;i<=y;i++){
			for(int j=1;j<=12;j++){
				if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){
					sum+=31;
				}else if(j==4||j==6||j==9||j==11){
					sum+=30;
				}else if(j==2&&i%4==0&&i%100!=0){
					sum+=29;
				}else{
					sum+=28;
				}
				if(sum%7==6&&i!=1900){
					if(i==2000&&j==12){
					}else
					  count++;
				}
			}
		}
		return count;
	}
	
	/**
	 * 使用java中的calendar
	 * @return
	 */
	private static int findSundays(){
		int count = 0;
		try {
			final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			Calendar a = Calendar.getInstance();
			a.setTime(format.parse("1901-1-1"));
			Calendar b = Calendar.getInstance();
			b.setTime(format.parse("2000-12-31"));
			while(a.before(b)){
				if(a.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
					count++;
				}
				a.add(Calendar.MONTH, 1);
			}
			
		} catch (Exception e) {
			e.toString();
		}
		return count;
	}	
}

问题答案:171

你可能感兴趣的:(欧拉计划网第十九题解决办法——两种方案)