【蓝桥杯】快读|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<>();
		//输入数据并放入map
		for(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中遍历每个key
			if(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超过了12
				year++;
				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到3
		int 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-9
		Calendar 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;
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker之数据卷自定义镜像

目录 一、数据卷 ​二、自定义镜像 2.1自定义centos 一、数据卷 在docker中&#xff0c;数据卷是宿主机的一个可以供一个或多个容器使用的特殊目录&#xff0c;它可以在容器之间共享和重用&#xff0c;本地与容器间传递数据更高效&#xff1b;对数据卷的修改会立马有效&#…

CSS——PostCSS简介

文章目录 PostCSS是什么postCSS的优点补充&#xff1a;polyfill补充&#xff1a;Stylelint PostCSS架构概述工作流程PostCSS解析方法PostCSS解析流程 PostCSS插件插件的使用控制类插件包类插件未来的CSS语法相关插件后备措施相关插件语言扩展相关插件颜色相关组件图片和字体相关…

代码库管理工具Git介绍

阅读本文同时请参阅-----免费的Git图形界面工具sourceTree介绍 Git是一个分布式版本控制系统&#xff0c;它可以帮助开发者跟踪和管理代码历史。Git的命令行工具是使用Git的核心方式&#xff0c;虽然它可能看起来有些复杂&#xff0c;但是一旦掌握了基本命令&#xff0c;你…

基于MQTT协议实现微服务架构事件总线

一、场景描述 昨天在博客《客户端订阅服务端事件的实现方法》中提出了利用websocket、服务端EventEmitter和客户端mitt实现客户端订阅服务端事件&#xff0c;大大简化了客户端对服务端数据实时响应的逻辑。上述方案适用于单服务节点的情形。 对于由服务集群支撑的微服务架构&…

招聘系统架构的设计与实现

在当今竞争激烈的人才市场中&#xff0c;有效的招聘系统对企业吸引、筛选和管理人才至关重要。本文将探讨招聘系统的架构设计与实现&#xff0c;帮助企业构建一个高效、可靠的人才招聘平台。 ## 1. 系统架构设计 ### 1.1 微服务架构 招聘系统通常采用微服务架构&#xff0c;将…

Java JVM虚拟机面试题

Java JVM虚拟机面试题 前言1、ThreadLocal的底层原理和应用&#xff1f;2、Java中的锁池和等待池&#xff1f;3、wait()&#xff0c;yield()&#xff0c;join()&#xff0c;sleep()的区别&#xff1f;4、你们项⽬如何排查JVM问题&#xff1f;5、YGC和FGC发生时间&#xff1f;6、…

11.vue学习笔记(组件生命周期+生命周期应用+动态组件+组件保持存活)

文章目录 1.组件生命周期2.生命周期应用2.1通过ref获取元素DOM结构2.2.模拟网络请求渲染数据 3.动态组件3.1.A&#xff0c;B两个组件 4.组件保持存活&#xff08;销毁期&#xff09; 1.组件生命周期 每个Vue组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置…

探索AI视频模型的无限可能:OpenAI的Sora引领创新浪潮

文章目录 &#x1f4d1;前言一、技术解析二、应用场景三、未来展望四、伦理与创意五、用户体验与互动&#x1f324;️总结 &#x1f4d1;前言 随着人工智能技术的蓬勃发展&#xff0c;AI视频模型正逐渐成为科技领域的新宠。在这个变革的浪潮中&#xff0c;OpenAI推出的首个AI视…

Spring中 Unsupported class file major version 61 报错

初学Spring时遇到的一个错误&#xff1a;Unsupported class file major version 61 &#xff0c;如图所示&#xff1a; 网上查了一下大概是JDK的版本与Spring的版本不一致导致的错误&#xff1b;刚开始我用的Spring版本是&#xff1a; <dependencies><dependency>…

(全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF

研究生英语读写教程基础级教师用书PDF 研究生英语读写教程提高级教师用书PDF pdf下载&#xff08;完整版下载&#xff09; &#xff08;1&#xff09;研究生英语读写教程基础级教师用书PDF &#xff08;2&#xff09;研究生英语读写教程基提高级教师用书PDF

【Pytorch深度学习开发实践学习】Pytorch实现LeNet神经网络(1)

1.model.py import torch.nn as nn import torch.nn.functional as F引入pytorch的两个模块 关于这两个模块的作用&#xff0c;可以参考下面 Pytorch官方文档 torch.nn包含了构成计算图的基本模块 torch,nn.function包括了计算图中的各种主要函数&#xff0c;包括&#…

linux gdb 调试工具

1.写程序 首先&#xff0c;我们先写出一个 .c 或者.cpp程序 如 然后 gcc -g hello.c -o hello 或者 g -g hello.cpp -o hello &#xff08;-g&#xff09;要加 2. gdb调试 用 gdb &#xff08;可执行程序&#xff0c;如hello&#xff09; 进入之后&#xff0c;有…

Window系统安装USB Redirector结合cpolar实现远程访问本地USB设备

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序&#xff0c;它提供了共享和访问本地或互联网上的U…

物业智能水电抄表管理系统

物业智能水电抄表管理系统是物业管理行业的关键技术之一&#xff0c;其结合了智能化、远程监控和数据分析等功能&#xff0c;为物业管理公司和业主提供了高效、精准的水电抄表管理解决方案。该系统具有多项优势&#xff0c;能够提升物业管理效率&#xff0c;降低成本&#xff0…

[计算机网络]--MAC/ARP/DNS协议

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、认识以…

UnityWebGL UGUI中文不显示问题

这是Unity编辑中效果 打包成webgl后的效果&#xff08;中文没有显示出来&#xff09; 解决方法 将Unity默认使用的Arial替换成中文字体。 1.找到电脑字体库&#xff08;win电脑字体库路径&#xff1a;C:\Windows\Fonts &#xff1b;Mac电脑搜索“字体册”&#xff09;。 2.将…

TC3xx SMU、PMIC和Tranceiver的功能安全闭环

目录 1.TLF35584安全状态输出响应对象 1.1 响应ERR 收集到的错误信号 1.2 响应监控功能引发的ROT 1.3 响应看门狗引发的错误 1.4 环境过温引发的错误状态 1.5 为什么设计SSx&#xff1f; 2. 安全状态输出给谁 3.小结 在之前文章里&#xff0c;我们简述了TC3xx SMU如何…

js 面试题--事件循环event loop--宏任务和微任务

1 事件循环event loop概念&#xff1a; js 是非阻塞单线程语言&#xff0c;js在执行过程中会产生执行环境&#xff0c;执行环境会按顺序添加到执行栈中&#xff0c;先执行同步栈中的任务&#xff0c;当遇到异步任务时会添加到task队列中&#xff0c;同步栈执行完后&#xff0c…

Python学习系列 -初探标准库之logging库

系列文章目录 第一章 初始 Python 第二章 认识 Python 变量、类型、运算符 第三章 认识 条件分支、循环结构 第四章 认识 Python的五种数据结构 第五章 认识 Python 函数、模块 第六章 认识面向对象三大特性 第七章 初探标准库之os库 第八章 初探标准库之pathlib库 第九章 初探…

【数据结构(C语言)】排序详解

目录 文章目录 前言 一、排序的概念 1.1 排序的概念 1.2 常见的排序算法 二、插入排序 2.1 直接插入排序 2.1.1 基本思想 2.1.2 特性总结 2.1.3 代码实现 2.2 希尔排序 2.2.1 基本思想 2.2.2 特性总结 2.2.3 代码实现 三、选择排序 3.1 直接选择排序 3.1.1…