【蓝桥杯】快读|min和max值的设置|小明和完美序列|​顺子日期​|星期计算|山

目录

一、输入的三种方式

1.最常见的Scanner的输入方法

2.数据多的时候常用BufferedReader快读

3.较麻烦的StreamTokenizer快读(用的不多)

StreamTokenizer常见错误:

二、min和max值的设置

 三、妮妮的翻转游戏

四、小明和完美序列

五、顺子日期(填空题)

六、星期计算(填空题)

七、山


推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

 


一、输入的三种方式

1.最常见的Scanner的输入方法

Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int m = scan.nextInt();
System.out.print(n+" "+m);

2.数据多的时候常用BufferedReader快读

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] strings = br.readLine().split(" ");
int n = Integer.parseInt(strings[0]);
int m = Integer.parseInt(strings[1]);
System.out.print(n+" "+m);

3.较麻烦的StreamTokenizer快读(用的不多

对于读取字符类型的操作,只能读取26个字母,特殊符号和数字无法读取,有其局限性

因为他使用起来比较麻烦,所以可以封装一个对象,减少代码量

//封装的对象
static class Read {StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));public int nextInt() throws Exception {st.nextToken();//读取数据return (int)st.nval;//默认存储的是double类型}public String readLine() throws Exception {//有局限,慎用st.nextToken();return st.sval;}}public static void main(String[] args) throws Exception {Read read = new Read();int n = read.nextInt();System.out.print(n);
}

StreamTokenizer常见错误:

(1)StreamTokenizer读入long类型的数字时会出现错误

因为nval的类型是double,在转换为long类型的过程中,double类型能表示的数字范围比long大,但是是以牺牲精度的方式获得更大的存储,而他能精确保存的数字位数为十进制的15或16位,要比long小

由图可以看见,double类型在存储时,牺牲了精度,导致结果不准确

(2)StreamTokenizer读入太长的字符串时也会有问题 


二、min和max值的设置

min设为最大值(以及这样设的易错点),max设为最小值,求和初始值为0,求积初始值为1简单理解这样设的原理,min要存储最小值,我们在给min设初始值的时候不能影响我的最终结果,那我肯定不能设一个小的值,假设设为0,那么输入是1234,这样你的min输出的是几?自然是0,但实际最小值是1,这是因为我们的初始值,影响到了答案,所以要设一个题目中的最大值或者设一个不会出现的最大值也行。

一般都这样设置:int min = Integer.MAX_VALUE

但是也存在一定的弊端:

如果遇到了以下代码if(min+a>b),类似这种判断很容易出现问题,本身min是整数类型的最大值,它在加上a,很可能爆int直接变成负数,那么就会导致判断出错。这样写的时候可以加一个判断if(min!=Integer.MAX_VALUE&&min+a>b)。


 三、妮妮的翻转游戏

import java.util.*;public class 妮妮的翻转游戏 {public static void main(String[] args) {Scanner s = new Scanner(System.in);int n = s.nextInt();//解法1:if else语句		if(n==0) System.out.print(1);else System.out.print(0);//解法2:异或(找不同)System.out.print(n^1);//解法3:取反System.out.print(~n+2);//~n=-n-1//解法4:三目运算符System.out.print(n==1?0:1);}
}

四、小明和完美序列

思路1:只看删除

eg:对于3这个数字,如果3的个数<3,那么就需要全删;如果3的个数>3,那么就需要删到3个

因为本题每个数字都有一个对应的值,所以可以考虑map(key,value) (用数组时间会超时)

那么如果3的个数<3,那么就删value次;如果3的个数>3,那么就需要删value-key次

import java.util.*;public class 小明和完美序列 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();HashMap<Integer,Integer> map = new HashMap<>();//输入数据并放入mapfor(int i=0;i<n;i++) {int a = scan.nextInt();
//			if(!map.containsKey(a)) {//第一次放入,value置为1
//				map.put(a, 1);
//			}else {
//				map.put(a, map.get(a)+1);//非第一次放入,value+1
//			}//这一行可以代替上面,getOrDefault方法map.put(a, map.getOrDefault(a, 0)+1);}int count = 0;//要删除的次数for(Integer e : map.keySet()) {//从map中遍历每个keyif(map.get(e)>e) {//相当于>3次count+=map.get(e)-e;} else if(map.get(e)<e) {//相当于<3次count+=map.get(e);}}System.out.print(count);}
}

思路2:看保留(找到本来需要保留的个数m和现有的总次数n,删除的次数count=n-m)

但是注意:只有value>=key的时候才进行保留

import java.util.*;public class 小明和完美序列 {public static void main(String[] args) { Scanner scan = new Scanner(System.in);int n = scan.nextInt();HashMap<Integer,Integer> map = new HashMap<>();for(int i=0;i<n;i++) {int a = scan.nextInt();map.put(a, map.getOrDefault(a, 0)+1);}int sum = 0;//要保留的次数for(Integer e:map.keySet()) {if(map.get(e)>=e) {sum+=e;}}System.out.print(n-sum);}
}

五、顺子日期(填空题)

思路1:手写日期模拟器 注意闰年

public class 顺子日期 {static int year=2022,month=1,day=1;static int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};//注意2月public static void main(String[] args) {//手写日期模拟器自动生成下一个日期Scanner scan = new Scanner(System.in);int count = 0;//顺子日期的个数while(year!=2023) {if(check()) {//判断是否满足顺子日期count++;}day++;if(month==2) {//闰年29天特殊考虑if(year%400==0||(year%4==0&&year%100!=0)) {if(day>29) {month++;day=1;}}else {if(day>28) {month++;day=1;}}}else {if(day>days[month]) {//day超过了本月的天数范围month++;day=1;}}if(month==13) {//month超过了12year++;month=1;}}System.out.print(count);}//判断是否满足顺子日期private static boolean check() {//数字形式int num = 0;num += year;num =num*100+month;num =num*100+day;//转为字符串的形式String string = String.valueOf(num);//正式开始判断:思路如果后面一个字符是前面字符+1那么就step++,直到step到3int step = 1;for(int i =1;i<string.length();i++) {if(string.charAt(i-1)+1==string.charAt(i)) {step++;} else {step=1;//不是顺子重新开始}//如果step到3就是顺子日期if(step==3) {return true;}}return false;}
}

思路2:java自带的日期函数

(1)用到了Calendar calendar = Calendar.getInstance();的set和get方法

注意set方法中的bug:month是从0开始的

(2)用到了SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");//规范日期的写法

//方法2:java自带的日期函数
public class 顺子日期 {public static void main(String[] args) {String [] seq = {"012","123"};//day不可能为4-9Calendar calendar = Calendar.getInstance();calendar.set(2022, 0,1);//为什么月要初始化为0:这里相当于一个bug,这个函数月就是从0开始的SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");//规范日期的写法int count = 0;//开始统计顺子日期的数目while(calendar.get(calendar.YEAR)==2022) {//取出calendar中的年份String date = sdf.format(calendar.getTimeInMillis());//让date规范为yyyyMMdd//遍历字符串看有没有这个可能存在的顺子for(String s:seq) {if(date.contains(s)) {count++;break;//有两个顺子也算一个日期,count只能加一次}}calendar.add(calendar.DATE, 1);//日期+1}System.out.print(count);}
}

六、星期计算(填空题)

20的22次方已经超过了long类型的范围

解法1:BigInteger类(这个类在java中可以表示任意大小的整数,没有固定的范围限制)

import java.math.BigInteger;public class 星期计算 {public static void main(String[] args) {BigInteger bigInteger = new BigInteger("20");//运算类型都得是BigInteger类型BigInteger n = bigInteger.pow(22).mod(new BigInteger("7"));System.out.print(n);}
}

得到的答案是1,那么结果直接输出7即可

解法2: 数学方法:(a*b)%p=(a%p*b%p)%p

int mod7 = 1;
for(int i=1;i<=22;i++) {mod7 = (mod7*20)%7;//每一次次方都%7
}
System.out.print(mod7);

七、山(填空题)

思路:回文&&单调性

//思路:回文判断+单调性判断(这样就只用判断一边)
public class 山 {public static void main(String[] args) {int n = 0;for(int i=2022;i<=2022222022;i++) {if(huiwen(i)&&dandiao(i)) {n++;}}System.out.print(n);}//判断单调性private static boolean dandiao(int n) {int[] a = new int[10];int i=0;while(n>0) {a[i++] = n%10;n =n/10;}int l=i/2;for(int j=1;j<=l;j++) {if(a[j]<a[j-1]) {return false;}}return true;}//回文判断:思路前后指针遍历,看是不是一样public static boolean huiwen(int n) {int[] a = new int[10];int i =0;//把数字放入数组while(n>0) {a[i++] = n%10;n =n/10;}int l=0,r=i-1;while(l<r) {if(a[l]!=a[r]) {return false;}l++;r--;}return true;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于java SSM springboot+redis网上水果超市商城设计和实现以及文档

基于java SSM springbootredis网上水果超市商城设计和实现以及文档 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 …

华为OD机试真题-最长子字符串的长度(一)-2023年OD统一考试(C卷)---Python3--开源

题目&#xff1a; 考察内容&#xff1a; 思路转化&#xff1a;求出o字母出现偶次&#xff08;o的索引&#xff09;&#xff1b;环形–双倍字母&#xff1b; 方法1&#xff1a;循环变量双倍字母&#xff08;保证环线&#xff09;&#xff0c;记录最大偶次&#xff0c;如果是&a…

Soul App与众多知名品牌展开合作,广告商业化提速显著

作为一家在2016年创立的兴趣社交应用,Soul App一直以其独特的数字头像和标签AI匹配的社交方式脱颖而出。其独特之处在于,用户在这个平台上并不被鼓励上传真实的人像照片,而是被要求使用数字头像进行社交。这种设计受到了年轻用户喜爱,成为其用户增长的原因之一。而创始人张璐在…

闲扯B-Tree和B+Tree的异同

我们今天要聊一个比较硬的话题&#xff1a; 一个 / 传说中的 / 惊天动地的 / 牛逼的 / 大家都听说过的 / 却又很少实际深入接触到的 / 但又基本每天都在使用的数据结构。&#xff08;大家注意看上一句话的定语&#xff09; 我记得我最先接触B树是在大学学数据结构的时候&#x…

探索IP地址定位工具:解读IP数据云的功能与优势

在当今数字化时代&#xff0c;IP地址定位工具成为了许多领域中不可或缺的技术支持&#xff0c;为网络安全、地理定位服务和个性化推荐等提供了重要数据支持。其中&#xff0c;IP数据云作为一种领先的IP地址定位工具&#xff0c;具有一系列功能和优势&#xff0c;本文将对其进行…

代码随想录算法训练营29期|day64 任务以及具体安排

第十章 单调栈part03 有了之前单调栈的铺垫&#xff0c;这道题目就不难了。 84.柱状图中最大的矩形class Solution {int largestRectangleArea(int[] heights) {Stack<Integer> st new Stack<Integer>();// 数组扩容&#xff0c;在头和尾各加入一个元素int [] ne…

如何在windows系统部署Lychee网站,并结合内网穿透打造个人云图床

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站&#xff0c;可以看做是云存储的一部分&#xff0c;既可…

element el-table表格内容宽度自适应,不换行,不隐藏

2024.2.27今天我学习了如何用el-table实现表格宽度的自适应&#xff0c;当我们动态渲染表格数据的时候&#xff0c;有时候因为内容太多会出现挤压换行的效果&#xff1a; 我们需要根据内容的最大长度设置动态的宽度&#xff0c;这边我在utils里面封装了一个js&#xff1a; //…

自然语言处理: 第十三章Xinference部署

项目地址: Xorbitsai/inference 理论基础 正如同Xorbits Inference&#xff08;Xinference&#xff09;官网介绍是一个性能强大且功能全面的分布式推理框架。可用于大语言模型&#xff08;LLM&#xff09;&#xff0c;语音识别模型&#xff0c;多模态模型等各种模型的推理。通…

MySQL 篇-深入了解 DML、DQL 语言(二)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 DML、DQL 语言说明 2.0 使用 DML 实现对数据管理和操作 2.1 DML - 增添数据 insert 2.2 DML - 修改数据 update 2.3 DML - 删除数据 delete 3.0 使用 DQL 实现对…

Data Leakage and Evaluation Issues inMicro-Expression Analysis 阅读笔记

IEEE Transactions on Affective Computing上的一篇文章&#xff0c;做微表情识别&#xff0c;阅读完做个笔记。本文讨论了Data Leakage对模型准确度评估的影响&#xff0c;及如何融合多个微表情数据集&#xff0c;从而提升模型的准确度。工作量非常饱满&#xff0c;很认真&…

信息学竞赛CSP中组合数学知识进阶及经典题目

组合数学 组合数卷积&#xff08;范德蒙德卷积&#xff09; ∑ i 0 k ( n i ) ( m k − i ) ( n m k ) \sum_{i0}\limits^k\dbinom{n}{i}\dbinom{m}{k-i}\dbinom{nm}{k} i0∑k​(in​)(k−im​)(knm​) 组合意义&#xff1a;有 n n n 个红球以及 m m m 蓝球&#xff0c;…

线上故障的排查清单

线上故障主要会包括CPU、磁盘、内存以及网络问题&#xff0c;而大多数故障可能会包含不止一个层面的问题&#xff0c;所以进行排查时候尽量四个方面依次排查一遍。 同时例如 jstack、jmap 等工具也是不囿于一个方面的问题的&#xff0c;基本上出问题就是df、free、top 三连&am…

全网最详细Python自动化测试(从零搭建完整python自动化测试框架)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 自动化测试介绍 自动化测试(Automated Testing)&#x…

基于java Springboot实现课程评分系统设计和实现

基于java Springboot实现课程评分系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…

SpringMVC 学习(五)之域对象

目录 1 域对象介绍 2 向 request 域对象共享数据 2.1 通过 ServletAPI (HttpServletRequest) 向 request 域对象共享数据 2.2 通过 ModelAndView 向 request 域对象共享数据 2.3 通过 Model 向 request 域对象共享数据 2.4 通过 map 向 request 域对象共享数据 2.5 通过…

Ant for Blazor做单个表的增删查改

Ant for Blazor做单个表的增删查改 2024年02月27日花了一天时间弄出来了&#xff0c;基本弄好了&#xff0c;vs2022blazor servernet8,引用的AntDesign版本是0.17.4 代码里的model和repository是用自己牛腩代码生成器生成的东西&#xff0c;sqlsugar的&#xff0c;记得在prog…

分布式一致性算法-Paxos翻译和注解

Paxos是解决不可靠处理器&#xff08;不可靠是指处理器可能故障&#xff09;网络中一致性问题(consensus)的一个协议族。一致性&#xff08;或者共识&#xff09;是在一组参与者之间对一个结果达成共识的过程。当参与者或者它们的交互媒介可能发生故障的时候&#xff0c;这个问…

幻兽帕鲁(Palworld 1.4.11.5.0)私有服务器搭建(docker版)

文章目录 说明客户端安装服务器部署1Panel安装和配置docker服务初始化设置设置开机自启动设置镜像加速 游戏服务端部署游戏服务端参数可视化配置 Palworld连接服务器问题总结 服务端升级&#xff08;1.5.0&#xff09; 说明 服务器硬件要求&#xff1a;Linux系统/Window系统&a…

JS总览-JS高级程序设计4-学习笔记

JS简史 1995年 JS 问世&#xff0c;彼时其主要任务是替代服务器端语言处理输入验证 1995年网景公司的 Brendan Eich 开发了一个脚注Live Script的脚步语言&#xff0c;后来网景公司与 Sun 公司结盟&#xff0c;更名 Live Script 为 Java Script 由于微软发布 IE3 时包含了自己…