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

本文探讨了一个有趣的日期问题:20世纪中每个月的第一天恰好是星期日的次数。通过两种不同的方法——手动计算和利用Java的Calendar类进行验证,得出了最终的答案。

题目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

### 2023年蓝桥杯省赛Java研究生组真解析 以下是关于2023年蓝桥杯省赛Java研究生组的部分真及其相关内容: #### 第一:日期 该要求计算特定日期的相关数值。具体来说,输入一个日期字符串并对其进行处理以得出最终的结果。例如,对于给定的日期`35813063`,可能涉及对其分解或转换的操作[^3]。 #### 第二:与非门 此考察逻辑电路的基础知识。通过暴力枚举的方式解决十个门电路的问,最终得到结果为`30528`。这表明可以通过简单的穷举法来验证所有可能性,并从中筛选符合条件的情况。 #### 第三:棋盘 涉及到二维数组上的操作,利用差分算法可以有效降低时间复杂度至\(O(m + n^2)\),从而高效完成任务。 #### 第四:矩阵最大和 目标是从一个矩阵中找到满足条件的最大子矩阵之和。一种朴素的做法是对所有可能的子矩阵进行遍历,但这仅适用于较小规模的数据集;为了提高效率,通常需要借助更高级的数据结构如线段树等工具优化性能。 #### 第五:互质数的个数 应用欧拉函数理论快速求解范围内两两互质整数的数量。同时结合快速幂运算技巧加速指数级增长情况下的模运算过程。 #### 第六:奇怪的数 属于动态规划范畴内的难之一——数位DP问。这类目往往要求我们设计状态转移方程时充分考虑当前位与其他相邻位置之间的关系以及约束条件的影响。 #### 第七:旅行计划 针对大规模数据(\(n=10^5\))场景下最优路径的选择方案展开讨论。由于直接采用传统方法难以承受如此庞大的计算量,因此引入动态规划思想,在一定程度上缓解了这一矛盾冲突。 #### 第八:太阳 初步判断应采取贪婪策略逐步构建局部最优解直至覆盖全局范围为止。然而实际实现过程中还需进一步细化规则设定部分细节之处以便更好地适应各种边界状况的发生概率分布特性变化规律特点等方面因素考量。 #### 第九&第十:高塔 & 反异或01串 这两道目均未提供明确解决方案说明文档资料链接等内容信息资源支持服务功能模块开发进度安排表等相关事宜待后续补充完善后再另行通知告知大家知晓了解清楚明白无误之后再行动起来吧! ```python def count_distinct_substrings(s): substrings = set() n = len(s) for i in range(n): temp = "" for j in range(i, n): temp += s[j] substrings.add(temp) return len(substrings) s = "0100110001010001" result = count_distinct_substrings(s) print(result) ``` 上述代码片段展示了如何统计字符串的不同非空子串数量的一种方法。它通过对每一个起始索引逐一遍历其后的所有字符组合形成新的子串加入集合中去重后返回总数目作为答案输出显示在屏幕上供用户查看参考学习借鉴使用[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值