当前位置: 首页 > article >正文

蓝桥杯-顺子日期

问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。小明想知道在整个 2022 年份中,一共有多少个顺子日期?
运行限制
最大运行时间:1s
最大运行内存: 512M

本来感觉这个题很简单,应该可以直接手算,结果发现一直错,这种题保险起见还是代码算比较好:

1.yearmonth类求每个月的天数

在Java中,可以使用java.time包中的YearMonth类和TemporalAdjusters类来获取某一年的某一个月有多少天。以下是具体的代码示例:

import java.time.YearMonth;
import java.time.temporal.TemporalAdjusters;

public class Main {
    public static void main(String[] args) {
        int year = 2024; // 假设我们要获取2024年的某一个月的天数
        int month = 2;   // 假设我们要获取2月的天数

        // 创建YearMonth对象
        YearMonth yearMonth = YearMonth.of(year, month);

        // 使用atEndOfMonth()方法获取该月的最后一天
        int daysInMonth = yearMonth.atEndOfMonth().getDayOfMonth();

        System.out.println(year + "年" + month + "月有 " + daysInMonth + " 天");
    }
}

这段代码首先导入了必要的类,然后创建了一个YearMonth对象,表示指定的年份和月份。接着,使用atEndOfMonth()方法获取该月的最后一天,并通过getDayOfMonth()方法获取该月的天数。这样就可以得到某年某月有多少天了。

2.将三个数字转换为日期格式(补0+字符串格式化)

在Java中,如果你有三个数字分别代表年、月、日,你可以将它们转换为yyyymmdd格式的字符串。以下是一个简单的方法来实现这一转换:

public class DateConverter {
    public static void main(String[] args) {
        int year = 2024; // 年份
        int month = 11;  // 月份
        int day = 17;   // 日期

        String formattedDate = String.format("%04d%02d%02d", year, month, day);
        System.out.println(formattedDate); // 输出:20241117
    }
}

在这个例子中,String.format方法用于格式化字符串。%04d表示至少4位的整数,如果不足4位则在前面补零;%02d表示至少2位的整数,如果不足2位则在前面补零。这样,无论输入的年、月、日是几位数,输出都将是标准的yyyymmdd格式。

3.判断一个字符串序列中是否包含某个字符串

在Java中,要检查一个字符串日期是否包含特定的数字序列,可以使用以下方法:

  1. 使用String类的contains方法
    这是最直接的方法,可以直接检查字符串中是否包含特定的子序列。例如,对于字符串数组shuzi中的每个元素,你可以使用contains方法来检查它们是否存在于目标字符串日期中。
String date = "20241117"; // 假设这是你要检查的日期字符串
String[] shuzi = {"012", "123", "234", "345", "456", "567"};

for (String num : shuzi) {
    if (date.contains(num)) {
        System.out.println("日期中包含序列:" + num);
    } else {
        System.out.println("日期中不包含序列:" + num);
    }
}
  1. 使用正则表达式
    如果你需要更复杂的匹配,可以使用正则表达式来检查字符串中是否包含特定的模式。例如,你可以使用PatternMatcher类来实现这一点。
import java.util.regex.Pattern;
import java.util.regex.Matcher;

String date = "20241117";
String[] shuzi = {"012", "123", "234", "345", "456", "567"};

Pattern pattern = Pattern.compile("|".join(shuzi)); // 构建一个正则表达式,包含所有要检查的序列
Matcher matcher = pattern.matcher(date);

for (String num : shuzi) {
    if (matcher.find()) {
        System.out.println("日期中包含序列:" + num);
    } else {
        System.out.println("日期中不包含序列:" + num);
    }
}

请注意,这里的"|".join(shuzi)是一个简化的写法,实际上Java中没有直接的join方法,你需要自己实现或者使用其他方式来构建正则表达式字符串。例如,你可以使用StringBuilder来构建正则表达式字符串:

StringBuilder regex = new StringBuilder();
for (String num : shuzi) {
    regex.append(num).append("|");
}
regex.setLength(regex.length() - 1); // 移除最后一个"|"
Pattern pattern = Pattern.compile(regex.toString());

这两种方法都可以有效地检查一个字符串日期中是否包含特定的数字序列。选择哪种方法取决于你的具体需求和偏好。

4.AC代码

package yunkePra;

import java.text.SimpleDateFormat;
import java.time.Year;
import java.time.YearMonth;
import java.util.Calendar;

public class p3 {
	public static void main(String[] args) {
//		System.out.println(5);
		String[] shuzi = {"012","123","234","345","456","567"};
		int result = 0;
		for(int i=1;i<=12;i++) {
			YearMonth yearMonth = YearMonth.of(2022, i);
			int days = yearMonth.atEndOfMonth().getDayOfMonth();
			for(int j=1;j<=days;j++) {
				String date = String.format("%04d%02d%02d",2022,i,j);
				for (String num:shuzi) {
					if (date.contains(num)) {
						result++;
						break;
					}
				}
			}
		}
		System.out.println(result);
	}
}


http://www.kler.cn/a/405365.html

相关文章:

  • 杰理-gpadc
  • 【CSP CCF记录】201903-1第16次认证 小中大
  • wsl虚拟机中的dockers容器访问不了物理主机
  • uniapp开发微信小程序笔记3-全局配置、导航栏配置、tabBar配置
  • 科研实验室的数字化转型:Spring Boot系统
  • iOS UI 自动化 手势右滑退出当前页面
  • wireshark使用lua解析自定义协议
  • 神经网络问题之:梯度不稳定
  • 开源 LLM 网关:APIPark 能做什么?
  • python获取本地电脑的ip和mac地址
  • Python后端入门
  • 微信小程序技术架构图
  • 力扣--LCR 141.训练计划III
  • 二十:HTML Form表单提交时的协议格式
  • 银河麒麟v10 x86架构二进制方式kubeadm+docker+cri-docker搭建k8s集群(证书有效期100年) —— 筑梦之路
  • C++ 中的智能指针
  • 设计模式之 桥接模式
  • HarmonyOS中UIAbility和windowStage的区别
  • 【企业级分布式系统】Ceph集群
  • Hadoop 系列 MapReduce:Map、Shuffle、Reduce
  • uniapp接入高德地图
  • 【更新】中国省级产业集聚测算数据及协调集聚指数数据(2000-2022年)
  • Python+Selenium+Pytest+Allure+ Jenkins webUI自动化框架
  • 七次课掌握 Photoshop:绘画与修饰
  • librdns一个开源DNS解析库
  • 垂起固定翼无人机搭载高清三光(4K可见+红外+激光测距)吊舱图像采集技术详解