每日一刷——1.20——准备蓝桥杯

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网


题目一

请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。

比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次。

输入描述:

输入共1行,为两个正整数L和R,之间用一个空格隔开。

输出描述:

输出共1行,表示数字2出现的次数。

示例1

输入

2 22

输出

6

示例2

输入

2 100

输出

20   

 Java代码展示:

import java.util.Scanner;public class Main{public static void main(String[] args){int a=0,b=0,num=0;Scanner in =new Scanner(System.in);//这个是循环读取a =in.nextInt();b =in.nextInt();for(int i=a;i<=b;i++){int temp =i;while(temp!=0){int j=temp%10;if(j==2){num++;}temp/=10;}}System.out.println(num);}
}

注意:

在 Java 中,变量 i 是 for 循环的迭代变量,它在循环的每次迭代中都会被更新。如果在 while 循环中直接使用 i 而不创建 temp 变量,会出现以下问题:

当我们在 while 循环中修改 i 的值(通过 temp /= 10),这会影响 for 循环的迭代过程。因为 i 不仅是 while 循环的控制变量,也是 for 循环的迭代变量,修改 i 会导致 for 循环的迭代逻辑出现错误。

例如,假设 i 的初始值是 123,在 while 循环中你将 i 不断除以 10 来检查其每一位数字是否为 2。第一次 while 循环结束后,i 的值就变成了 12,而不是 for 循环期望的下一个迭代值 124。这会导致 for 循环的迭代顺序被破坏,最终结果错误。

为了避免这种情况,我们应该引入了 temp 变量,将 i 的值复制给 temp,然后在 while 循环中对 temp 进行操作,这样就不会影响 for 循环的迭代过程。

题目二

题目描述:B-日历中的数字_牛客竞赛语法入门班函数与递归习题

只通过了测试样例的代码。。。

// 日中包含的   月中包含的   年中包含的// 数字x在这个月的日期里出现了多少次。//闰年
import java.util.Scanner;public class Main{public static void main(String[] args){Scanner in =new Scanner(System.in);while(in.hasNextInt()){int count=0;int q=0;int year =in.nextInt();int month =in.nextInt();int num =in.nextInt();while(year!=0){if(year%10 ==num){q++;}year/=10;}int[] date={31,28,31,30,31,30,31,31,30,31,30,31};count+=q*date[month-1];int temp1=month;while(temp1!=0){if(temp1%10==num){if(temp1==2){count+=date[month-1];//判断闰年代码if((year % 4 == 0 && year % 100!= 0) || year % 400 == 0){count+=1;}}else{count+=date[month-1];}}temp1/=10;}for(int i=1;i<=date[month-1];i++){int temp=i;while(temp!=0){if(temp%10==num){count++;}temp/=10;}}if(num==0){count+=9;if(month<10){count+=date[month-1];}}System.out.println(count);}}
}

正确代码展示:

import java.util.Scanner;public class Main {public static void main(String[] args) {// 创建一个 Scanner 对象,用于从标准输入读取数据Scanner sc = new Scanner(System.in);// 定义一个数组 arr 存储每个月的天数,2 月初始化为 28 天int[] arr = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};// 进入一个循环,只要输入流还有数据,就会一直执行while (sc.hasNext()) {// 创建一个 StringBuilder 对象,用于存储日期字符串StringBuilder sb = new StringBuilder();// 从输入读取年份 yint y = sc.nextInt();// 从输入读取月份 mint m = sc.nextInt();// 从输入读取一个字符 xchar x = sc.next().charAt(0);// 判断是否为闰年,如果是闰年将 2 月的天数修改为 29 天,否则为 28 天if (y % 400 == 0 || (y % 4 == 0 && y % 100!= 0)) {arr[1] = 29;} else {arr[1] = 28;}// 循环遍历该月的每一天for (int i = 1; i <= arr[m - 1]; i++) {// 使用 String.format 方法将年份、月份和日期组合成一个字符串,格式为 yyyymmdd// %04d 表示年份为 4 位数字,不足 4 位在前面补 0// %02d 表示月份和日期为 2 位数字,不足 2 位在前面补 0String date = String.format("%04d%02d%02d", y, m, i);// 将生成的日期字符串添加到 StringBuilder 中sb.append(date);}// 计数器,用于统计字符 x 出现的次数int count = 0;// 遍历 StringBuilder 中的每个字符for (int i = 0; i < sb.length(); i++) {// 如果字符等于输入的字符 x,计数器加 1if (sb.charAt(i) == x) {count++;}}// 输出字符 x 在所有日期字符串中出现的次数System.out.println(count);}}
}

代码实现逻辑分析:

  1. 导入包和类的定义

    • import java.util.Scanner;:导入 Scanner 类,用于从标准输入读取数据。

    • public class Main:定义一个名为 Main 的公共类。

    • public static void main(String[] args):程序的入口点。

  2. 变量和对象的初始化

    • Scanner sc = new Scanner(System.in);:创建一个 Scanner 对象,用于读取用户输入。

    • int[] arr = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};:存储每个月的天数,初始时 2 月为 28 天。

  3. 输入处理和闰年判断

    • while (sc.hasNext()):只要输入流还有数据,就会执行以下操作。

    • StringBuilder sb = new StringBuilder();:创建一个 StringBuilder 对象,用于存储组合的日期字符串。

    • int y = sc.nextInt();:从输入读取年份。

    • int m = sc.nextInt();:从输入读取月份。

    • char x = sc.next().charAt(0);:从输入读取一个字符。

    • 对输入的年份 y 进行闰年判断,如果是闰年(能被 400 整除或能被 4 整除但不能被 100 整除),将 arr[1](2 月的天数)设置为 29 天,否则为 28 天。

  4. 日期字符串的生成和存储

    • for (int i = 1; i <= arr[m - 1]; i++):遍历该月的每一天。

    • String date = String.format("%04d%02d%02d", y, m, i);:将年份、月份和日期格式化为 yyyymmdd 的字符串。

    • sb.append(date);:将生成的日期字符串添加到 StringBuilder 中。

  5. 字符计数

    • int count = 0;:初始化一个计数器,用于统计字符 x 的出现次数。

    • for (int i = 0; i < sb.length(); i++):遍历 StringBuilder 中的字符。

    • if (sb.charAt(i) == x):如果字符等于输入的字符 x,计数器加 1。

  6. 结果输出

    • System.out.println(count);:输出字符 x 在存储的日期字符串中出现的次数。

使用说明:

  • 运行程序后,程序会不断等待用户输入。

  • 每次输入的格式应该是:年份 月份 字符,例如 2024 2 a

  • 程序会将输入的年份、月份和该月的日期按照 yyyymmdd 的格式组合成一个字符串,存储在 StringBuilder 中。

  • 程序会根据输入的年份判断是否为闰年,并更新 2 月的天数。

  • 最后程序会统计输入的字符在存储的日期字符串中出现的次数并输出结果。

        这个程序的主要目的是统计用户输入的字符在该年该月的日期字符串中出现的次数。例如,输入 2024 2 a,程序会将 2024 年 2 月的日期 20240201 到 20240229 组合成一个字符串,然后统计字符 a 在这个字符串中出现的次数。

错误原因分析 :

        就是感觉自己写代码并没有利用到计算机的精髓,甚至认为计算机实现比大脑自己想还要复杂,就感觉怪怪的,自己写一堆代码,麻烦的判断是不是闰年,如果年有这个数字怎么办?月有这个数字怎么办?就感觉计算机并没有帮到任何忙,只是把我的人脑思考的思路实现了。

知识点对应函数的学习:

  • sc.next().charAt(0)
  • sc.next() 用于读取输入的下一个字符串,而 charAt(0) 是 String 类的方法,用于获取该字符串的第一个字符。例如,char x = sc.next().charAt(0); 这一行先读取一个字符串,然后取其第一个字符存储在 x 中。

  • String.format()
  • 这是 String 类的一个静态方法,用于格式化字符串。在代码中 String date = String.format("%04d%02d%02d", y, m, i); 它将 y(年份)、m(月份)和 i(日期)按照 %04d%02d%02d 的格式组合成一个新的字符串。%04d 表示将整数格式化为 4 位数字,不足 4 位在前面补零,%02d 表示将整数格式化为 2 位数字,不足 2 位在前面补零

  • StringBuilder用法
一、创建 StringBuilder 对象
StringBuilder sb = new StringBuilder();

        上述代码创建了一个空的 StringBuilder 对象。StringBuilder 类提供了一种可变的字符串序列,允许对字符串进行动态操作,与 String 类不同,String 对象是不可变的,一旦创建,其内容不能修改,而 StringBuilder 可以在原有的基础上添加、插入、删除和替换字符。

二、添加内容到 StringBuilder

1、append() 方法:

sb.append("Hello");
sb.append(" ");
sb.append("World");

        这个方法可以将各种数据类型(如 Stringcharintdouble 等)添加到 StringBuilder 对象的末尾。在我的代码中:

for (int i = 1; i <= arr[m - 1]; i++) {String date = String.format("%04d%02d%02d", y, m, i);sb.append(date);
}

        通过 append 方法将格式化后的日期字符串添加到 sb 中,最终形成一个包含该月所有日期的长字符串。

三、插入内容到 StringBuilder

1、insert() 方法:

sb.insert(5, " there");

        此方法可以在 StringBuilder 的指定位置插入内容。例如,上述代码将在索引为 5 的位置插入 " there",如果 sb 原本存储 "Hello World",操作后会变成 "Hello there World"

四、删除内容

1、delete() 方法:

sb.delete(5, 11);

        这个方法可以删除 StringBuilder 中从起始索引到结束索引(不包括结束索引)的字符。例如,在上述插入操作后,使用 delete 方法会将 " there" 删除,sb 会变回 "Hello World"

2、deleteCharAt() 方法:

sb.deleteCharAt(5);

        该方法会删除 StringBuilder 中指定索引处的字符。

五、替换内容

1、replace() 方法:

​​

sb.replace(0, 5, "Hi");

        此方法将从起始索引到结束索引(不包括结束索引)的内容替换为新的字符串。上述代码将把 "Hello" 替换为 "Hi",如果 sb 存储 "Hello World",操作后会变成 "Hi World"

六、反转 StringBuilder 内容

reverse() 方法:

sb.reverse();

该方法会将 StringBuilder 中的字符序列进行反转。例如,如果 sb 存储 "Hello World",操作后会变成 "dlroW olleH"

七、转换为 String

toString() 方法:

String result = sb.toString();

这个方法将 StringBuilder 的内容转换为 String 类型,在需要将 StringBuilder 的内容作为字符串使用时,通常使用这个方法。

八、其他有用的方法

1、length() 方法:

int len = sb.length();

​​        该方法返回 StringBuilder 中字符序列的长度。

2、charAt() 方法:

char c = sb.charAt(0);

        此方法返回 StringBuilder 中指定索引处的字符。

        在原代码中,使用 StringBuilder 的目的是将一个月的所有日期按照 yyyymmdd 的格式拼接成一个长字符串,以便后续统计某个字符的出现次数。通过循环将日期添加到 StringBuilder 中,避免了多次字符串拼接造成的性能开销(因为每次使用 String 拼接都会创建新的 String 对象,而 StringBuilder 只在原对象上操作)。

import java.util.Scanner;public class StringBuilderExample {public static void main(String[] args) {StringBuilder sb = new StringBuilder();// 添加字符串sb.append("I");sb.append(" love");sb.append(" Java");// 插入字符串sb.insert(2, " really ");// 删除字符串sb.delete(2, 9);// 替换字符串sb.replace(0, 1, "We");// 反转字符串sb.reverse();// 输出最终结果System.out.println(sb.toString());}
}

        在上述示例中,我们展示了 StringBuilder 的多种操作。首先添加 "I love Java",然后在索引 2 处插入 " really ",再删除 " really ",接着将 "I" 替换为 "We",最后将整个字符串反转。

        使用 StringBuilder 可以提高字符串操作的效率,特别是在需要频繁修改字符串内容的情况下,避免了 String 的不可变特性带来的性能问题。同时,StringBuilder 提供了丰富的方法,可以方便地对字符串进行各种修改和操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/4752.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

整数的分离与合成

整数的分离与合成 一、整数的分离1.1 整数拆成数字的方法1.1.1 取尾法1.1.2 取头法 1.2 任意整数的分离 二、整数的合成 整数是由数字和数位组成的&#xff0c;比如327是一个三位数&#xff0c;它的数字是3、2、7,数位是个数、十位、百位。 经常有些题目考查将一个整数拆分成各…

动态规划(多状态)

面试题 17.16. 按摩师 面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int massage(vector<int>& nums) {int n nums.size();//特殊情况&#xff1a;空数组if(n0)return 0;vector<int> f(n);vector<int> g(n);…

【json_object】mysql中json_object函数过长,显示不全

问题&#xff1a;json只显示部分 解决&#xff1a; SET GLOBAL group_concat_max_len 1000000; -- 设置为1MB&#xff0c;根据需要调整如果当前在navicat上修改&#xff0c;只有效本次连接和后续会话&#xff0c;重新连接还是会恢复默认值1024 在my.ini配置文件中新增或者修…

ElasticSearch DSL查询之高亮显示

什么是高亮显示&#xff1f; 高亮显示是指在搜索结果中&#xff0c;将用户搜索的关键字突出显示&#xff0c;使其更为醒目。以百度搜索为例&#xff0c;当用户搜索“JAVA”时&#xff0c;搜索结果中的标题或概述部分会将“JAVA”高亮显示&#xff0c;通常以红色标出&#xff0…

WGAN - 瓦萨斯坦生成对抗网络

1. 背景与问题 生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;是由Ian Goodfellow等人于2014年提出的一种深度学习模型。它包括两个主要部分&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;…

低代码系统-产品架构案例介绍(五)

接上篇&#xff0c;某搭介绍。 某搭以低代码为核心驱动&#xff0c;利用AI能力强势推动应用深度体验&#xff0c;打通钉钉对接&#xff0c;且集成外部系统。 可以看出&#xff0c;某搭在未来的规划上&#xff0c;着重在于AI 也就说明&#xff0c;低代码产品在未来的竞争上&…

嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础

嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础 目录 1.NAND FLASH 和NOR FLASH异同 ? 2.CPU,MPU,MCU,SOC,SOPC联系与差别? 3.什么是交叉编译&#xff1f; 4.为什么要交叉编译&#xff1f; 5.描述一下嵌入式基于ROM的运行方式和基于RAM的运行方式有什么区别? 1…

学习记录之原型,原型链

构造函数创建对象 Person和普通函数没有区别&#xff0c;之所以是构造函数在于它是通过new关键字调用的&#xff0c;p就是通过构造函数Person创建的实列对象 function Person(age, name) {this.age age;this.name name;}let p new Person(18, 张三);prototype prototype n…

迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?

【图片来源于网络&#xff0c;侵删】 这是2024年初Figure公司展示的人形机器人Figure 01&#xff0c;他可以通过观看人类的示范视频&#xff0c;在10小时内经过训练学会煮咖啡&#xff0c;并且这个过程是完全自主没有人为干涉的&#xff01; 【图片来源于网络&#xff0c;侵删】…

海康工业相机的应用部署不是简简单单!?

作者&#xff1a;SkyXZ CSDN&#xff1a;SkyXZ&#xff5e;-CSDN博客 博客园&#xff1a;SkyXZ - 博客园 笔者使用的设备及环境&#xff1a;WSL2-Ubuntu22.04MV-CS016-10UC 不会吧&#xff1f;不会吧&#xff1f;不会还有人拿到海康工业相机还是一脸懵叭&#xff1f;不会还有人…

【自动控制原理】非线性系统 描述函数法 相平面法

写在前面&#xff08;叠甲&#xff09;&#xff1a; 非线性是控制科学中重要的一个研究方向&#xff0c;它所包含的理论远远超过自动控制原理中的内容。在本文中&#xff0c;所介绍的内容仍然在《自动控制原理》框架内&#xff0c;所以只介绍了自控原理课程中涉及的非线性问题&…

three.js实现裸眼双目平行立体视觉

three.js实现裸眼双目平行立体视觉原理&#xff1a; 利用两个相机、两个渲染器&#xff0c;同时渲染同一个场景。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"…

N个utils(sql)

sql&#xff0c;操作数据库的语言&#xff0c;也可以叫做数据库软件的指令集吧。名字而已&#xff0c;无所谓啦。 本质上&#xff0c;sql并不是java语言内的范畴。但却是企业级开发的范畴。并且我整个文章的一篇逻辑的本质&#xff0c;层的概念&#xff0c;其中一个大的层级就…

工业网口相机:如何通过调整网口参数设置,优化图像传输和网络性能,达到最大帧率

项目场景 工业相机是常用与工业视觉领域的常用专业视觉核心部件&#xff0c;拥有多种属性&#xff0c;是机器视觉系统中的核心部件&#xff0c;具有不可替代的重要功能。 工业相机已经被广泛应用于工业生产线在线检测、智能交通,机器视觉,科研,军事科学,航天航空等众多领域 …

【数据分享】1929-2024年全球站点的逐年平均气温数据(Shp\Excel\无需转发)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01;本次我们为大家带来的就是具体到气象监…

pytest+playwright落地实战大纲

前言 很久没有更新博客&#xff0c;是因为在梳理制作Playwright测试框架实战相关的课程内容。现在课程已经完结&#xff0c;开个帖子介绍下这门课程&#xff08;硬广, o(〃&#xff3e;▽&#xff3e;〃)o&#xff09; 课程放在CSDN学习频道&#xff0c; 欢迎关注~ PyTestPl…

鸿蒙系统 将工程HarmonyOS变成OpenHarmony

DevEco Studio软件创建工程后需要修改两个地方&#xff1a; 修改第二个build-profile.json5文件 将原先内容&#xff1a; {"app": {"signingConfigs": [],"products": [{"name": "default","signingConfig": &q…

Matlab总提示内存不够用,明明小于电脑内存

目录 前言情况1&#xff08;改matlab最大内存限制&#xff09;情况2&#xff08;重启电脑&#xff09;情况3 前言 在使用matlab中&#xff0c;有时候需要占用的内存并没有超过电脑内存依旧会报错&#xff0c;提示内存不够用&#xff0c;可以尝试下面几种方法&#xff0c;总有一…

[操作系统] 进程的调度

进程切换概念 时间⽚&#xff1a;当代计算机都是分时操作系统&#xff0c;没有进程都有它合适的时间⽚(其实就是⼀个计数 器)。时间⽚到达&#xff0c;进程就被操作系统从CPU中剥离下来。 死循环是如何运行&#xff1f; 当一个进程代码为死循环&#xff0c;它并不会一直占据C…

免费为企业IT规划WSUS:Windows Server 更新服务 (WSUS) 之快速入门教程(一)

哈喽大家好&#xff0c;欢迎来到虚拟化时代君&#xff08;XNHCYL&#xff09;&#xff0c;收不到通知请将我点击星标&#xff01;“ 大家好&#xff0c;我是虚拟化时代君&#xff0c;一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…