17 数星期日

1900年1月1日是星期一。
求 二十世纪(1901年1月1日到2000年12月31日)中,有多少个月的1号是星期天?

output :171

public static int countingSundays() {
		//1900年1月1日是星期一,那么7号就是星期日 (1900年不是闰年)
		int sum = 365 - 6;
		int count = 0;
		for(int i = 1901; i <=2000; i++) {  //i表示年
			for(int j =1; j <=12; j++) {   //j表示月
				sum = sum + dayOfYear(i, j);
				if(sum % 7 == 0)
					count ++; //最后一个月只加到1号,年循环完要把剩余的30天加上
			}
			sum = sum + 30;
		}
		return count;
	}
	
	//每月1号是当月的第几天
	public static int dayOfYear(int year, int month) {
		if(month == 1)
			return 1;
		return days(year, month-1) + dayOfYear(year, month-1);		
	}
	
	public static int days(int year, int month) {
		//1 3 5 7 8 10 12月 有31天。
		if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) {
			return 31;
		}
		else if(month==4 || month==6 || month==9 || month==11) {
			return 30;
		}
		else if(month==2 && (year % 4 !=0 || year % 400 !=0)) {
			return 28;
		}
		else {
			return 29;
		}
	}
	
	public static void main(String[] args) {
		System.out.println(countingSundays());
	}
  1. 闰年指的是能够被4整除却不能被100整除的年份,或者能够被400整除的年份。

参考程序二:
https://blog.csdn.net/qq_28394425/article/details/53083063

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值