蓝桥杯[每日两题] 真题:好数 神奇闹钟 (java版)

ops/2025/3/10 23:00:07/

题目一:好数

题目描述

一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位 · · · )上的数字是奇数,偶数位(十位、千位、十万位 · · · )上的数字是偶数,我们就称之为“好数”。给定一个正整数 N,请计算从 1 到 N 一共有多少个好数。

输入格式

一个整数 N。

输出格式

一个整数代表答案。

样例1

输入

java">24

输出 

java">7


样例2

输入

java">2024

输出

java">150

样例说明

对于第一个样例,24 以内的好数有 1、3、5、7、9、21、23,一共 7 个。

解题思路

我的思路是直接暴力做,先看奇数位,遇到不是奇数的,直接返回;如果奇数位符合条件,再看偶数位,同理遇到不是偶数的,直接返回。都符合就结果加1。

代码实现

java">import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此输入您的代码...int num = scan.nextInt();int res = 0;for (int i = 1; i <= num; i++) {res += isGoodNum(i);}System.out.println(res);scan.close();}private static int isGoodNum(int num) {String str = String.valueOf(num);//先看奇数位for (int i = str.length() - 1; i >= 0; i -= 2) {if (Integer.parseInt(str.charAt(i) + "") % 2 != 0) {continue;} else return 0;}//再看偶数位for (int i = str.length() - 2; i >= 0; i -= 2) {if (Integer.parseInt(str.charAt(i) + "") % 2 == 0) {continue;} else return 0;}return 1;}
}

题目二:神奇闹钟

题目描述

小蓝发现了一个神奇的闹钟,从纪元时间(1970 年 1 月 1 日 00:00:00 )开始,每经过 x 分钟,这个闹钟便会触发一次闹铃(纪元时间也会响铃)。这引起了小蓝的兴趣,他想要好好研究下这个闹钟。

对于给出的任意一个格式为 yyyy-MM-dd HH:mm:ss 的时间,小蓝想要知道在这个时间点之前(包含这个时间点)的最近的一次闹铃时间是哪个时间?

注意,你不必考虑时区问题。

输入格式

输入的第一行包含一个整数 T,表示每次输入包含 T 组数据。

接下来依次描述 T 组数据。

每组数据一行,包含一个时间(格式为 yyyy-MM-dd HH:mm:ss )和一个整数 x ,其中 x 表示闹铃时间间隔(单位为分钟)。

输出格式

输出 T 行,每行包含一个时间(格式为 yyyy-MM-dd HH:mm:ss ),依次表示每组数据的答案。

样例输入

java">2
2016-09-07 18:24:33 10
2037-01-05 01:40:43 30

样例输出

java">2016-09-07 18:20:00
2037-01-05 01:30:00

解题思路

这道题本身也不难,但是我刚开始也没什么思路,后来看了一下别人的,可能是我对时间这块还不是很熟悉,所以看了一小会儿才完全理解。接下来我将用图展示出我的思路。

首先,我们仔细读题后,可以得到以下信息:

①闹钟响的时候,用格式化时间来表示的话,秒数一定是为0的,因为起始时是0,并且是每过整数分钟,闹钟才响一次,所以我们不用关注输入的秒钟部分,直接归零即可;

②响铃时刻距纪元时间,一定是x倍数分钟,那么,也就相当于是x*60的倍数秒(1分钟等于60秒)。 

那么我们就想把时间转化为秒来计算,因为秒是该题目中最小单位,方便我们算。

 

如上图,黄点表示纪元,绿方块表示后续的响铃点,相邻方块之间就表示间隔了x分钟。那么,我们用蓝色圆点输入的时刻,题目要我们找出之前最近的一次响铃时间,那么我们就一步步往前移动即可。

往前移动:

 

经过数次移动,我们找到了这个时刻:

 

然后输出即可。

那怎么用程序性的语言来描述呢?我是这样理解的:

 响铃的时刻是能整除(x*60)的,所以就以这个作为判断条件。从给定的时刻开始,一分钟一分钟地判断,也就是每次往前移动一分钟,直到找出目标为止。

(为什么是一分钟一分钟地移动?因为我们说了,绿方块之间就是以分钟为单位的。)

(为什么要以秒钟来计算?因为秒钟是题目当中最小单位,方便计算。)

代码实现

看代码就懂了,顺便学了一下时间相关的API使用。

java">import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;public class Main {public static void main(String[] args) {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");Scanner scan = new Scanner(System.in);int n = scan.nextInt();String str[] = new String[n];scan.nextLine();for (int i = 0; i < n; i++) {str[i] = scan.nextLine();}//格式化输入的日期for (int i = 0; i < n; i++) {String[] times = str[i].split(" ");LocalDateTime ldt = LocalDateTime.parse(times[0] + " " + times[1], formatter);ldt = ldt.withSecond(0);//计算距离纪元时间多少秒long time = ldt.toEpochSecond(ZoneOffset.UTC);//将x转为秒单位int xSecond = Integer.parseInt(times[2]) * 60;//关键步骤:找出最近的倍数秒while (time % xSecond != 0) {time -= 60;//回退1分钟}//格式化输出ldt = LocalDateTime.ofEpochSecond(time, 0, ZoneOffset.UTC);System.out.println(ldt.format(formatter));}}
}

如果大家有更好的理解方式,欢迎评论区留言!


http://www.ppmy.cn/ops/164781.html

相关文章

AI 技术 引入 RTK(实时动态定位)系统,可以实现智能化管理和自动化运行

将 AI 技术 引入 RTK(实时动态定位)系统,可以实现智能化管理和自动化运行,从而提高系统的精度、效率和可靠性。以下是 AI 技术在 RTK 系统中的应用实例: 一、AI 技术在 RTK 系统中的应用场景 1. 整周模糊度快速解算 问题:RTK 的核心是解算载波相位的整周模糊度,传统方法…

升级到Android Studio 2024.2.2 版本遇到的坑

一、上来就编译报错&#xff0c;大概率是因为选择了替换安装&#xff0c;本地配置文件出错 找到本地当前版本的配置文件&#xff0c;删掉&#xff0c;重启studio就好了&#xff1a; 1、打开终端 2、“cd /Users/用户名/Library/Application\ Support/Google” //到Google目录 …

电力杆塔倾斜监测装置:守护电网安全的智能卫士

​ ​电力杆塔作为电力传输的重要支撑结构&#xff0c;其安全性直接关系到电网的稳定运行和电力供应的可靠性。然而&#xff0c;由于自然环境的复杂性和外部因素的影响&#xff0c;杆塔倾斜、倒塌等问题时有发生&#xff0c;给电力系统带来了巨大的安全隐患。为了应对这一挑…

React基础之useEffect

概念 useEffect是一个React Hook函数&#xff0c;用在React组件中创建不是由事件引起的而是由渲染本身引起的操作&#xff0c;比如发送Ajax&#xff0c;更改Dom等 import React, { useState } from react; import { useEffect } from react; const URLhttp://geek.itheima.net/…

MOM成功实施分享(七)电力电容制造MOM工艺分析与解决方案(第二部分)

声明&#xff1a;文章仅用于交流学习&#xff0c;不用于商业项目实施&#xff0c;部分图片来源于网络&#xff0c;如有侵犯权利&#xff0c;请联系作者及时删除。 在协同前端设计到生产方面&#xff0c;打通了 PLM 系统和 MES 系统的数据通道&#xff0c;实现 BOM 数据、工艺数…

江协科技/江科大-51单片机入门教程——P[4-1] 静态数码管显示 P[4-2] 动态数码管显示

本节将介绍数码管的原理和操作方法&#xff0c;包括静态数码管显示和动态数据管显示 目录 一、静态数码管显示 二、动态数码管显示 一、静态数码管显示 首先&#xff0c;看一下开发板上数码管的位置&#xff0c;它位于左上角&#xff0c;是八个 8 字形的显示器件。同时&…

Navigation的进阶知识与拦截器配置

Navigation的进阶知识与拦截器配置 写的不是很详细&#xff0c;后续有时间会补充&#xff0c;建议参考官方文档食用 1.如何配置路由信息 1.1 创建工程结构 src/main/ets ├── pages │ └── navigation │ ├── views │ │ ├── Mine.ets //…

laravel es 相关代码 ElasticSearch

来源&#xff1a; github <?phpnamespace App\Http\Controllers;use Elastic\Elasticsearch\ClientBuilder; use Illuminate\Support\Facades\DB;class ElasticSearch extends Controller {public $client null;public function __construct(){$this->client ClientB…