今日刷三题(day14):ISBN号码+kotori和迷宫+矩阵最长递增路径

题目一:ISBN号码

题目描述:

每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。

输入输出描述:

输入:0-670-82162-4                输出:Right
输入:0-670-82162-0                输出:0-670-82162-4

题目解析:

step1:首先将字符串转化为字符数组,并统计字符串长度为n。

step2:遍历整个除最后一个字符以外的字符数字,如果是数字,就乘以对应的位数,用sum统计累加之和。

step3:用ret=sum%11,如果计算出来的值与实际最后一个字符值相等,即s[n-1]-'0'==ret或者ret==10&&s[n-1]='X',返回Right;

如果不相等,更新s[n-1]的值,s[n-1]=(char) (ret==10?'X':ret+'0');并重新打印数组。

作答情况:

char类型转化为int类型搞不清楚:将字符减一个‘0’;

int类型转char类型:将数字加一个‘0’,并强制类型转换为char。

代码:

import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);char[] s=in.next().toCharArray();int num=1;int sum=0;int n=s.length;int ret=0;for(int i=0;i<n-1;i++){if(s[i]>='0'&&s[i]<='9'){sum+=(s[i]-'0')*num;num++;}}ret=sum%11;//4if(ret==s[n-1]-'0'||ret==10&&s[n-1]=='X'){System.out.print("Right");}else{s[n-1]=(char) (ret==10?'X':ret+'0');for(int i=0;i<n;i++){System.out.print(s[i]);}}}
}

题目二:kotori和迷宫

题目描述:

kotori在一个n*m迷宫里,迷宫的最外层被岩浆淹没,无法涉足,迷宫内有k个出口。kotori只能上下左右四个方向移动。她想知道有多少出口是她能到达的,最近的出口离她有多远?

输入输出描述:

输入描述:
第一行为两个整数n和m,代表迷宫的行和列数 (1≤n,m≤30) 后面紧跟着n行长度为m的字符串来描述迷宫。'k'代表kotori开始的位置,'.'代表道路,'*'代表墙壁,'e'代表出口。保证输入合法。
输出描述:
若有出口可以抵达,则输出2个整数,第一个代表kotori可选择的出口的数量,第二个代表kotori到最近的出口的步数。(注意,kotori到达出口一定会离开迷宫)

若没有出口可以抵达,则输出-1。

题目解析:

step1:首先从键盘中读入二维数组arr[i][j],如果遇到了起点' k ',记录下起点的下标为x1,y1

step2:写宽度优先搜索bfs(),统计到出口的距离。

step3:更新结果,用count统计出口个数,用ret记录最小距离,遍历整个数组,如果arr[i][j]=='e'(出口)而且dist[i][j]!=-1 (能走到出口位置),count++,并且更新ret

作答情况:

①二维数组从键盘中读入,不会写。

②如果bfs宽度优先遍历的话,遍历上下左右四个方向不知如何处理。

③构造二维数组来求距离没有想到。

④没有做过迷宫问题,初次做觉得有些难。

代码:

import java.util.*;
public class Main{public static int N=35;public static int m,n;public static int x1,y1;public static char[][] arr=new char[N][N];public static int[][] dist=new int[N][N];public static int[] dx={0,0,-1,1};public static int[] dy={-1,1,0,0};public static void main(String[] args){Scanner in=new Scanner(System.in);m=in.nextInt();n=in.nextInt();for(int i=0;i<m;i++){char[] temp=in.next().toCharArray();for(int j=0;j<n;j++){arr[i][j]=temp[j];if(arr[i][j]=='k'){x1=i;y1=j;}
}}bfs();int count=0;int ret=1000;for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(arr[i][j]=='e'&&dist[i][j]!=-1){count++;ret=Math.min(ret,dist[i][j]);}}}if(count==0) System.out.print(-1);else System.out.print(count+" "+ret);}
public static void bfs(){for(int i=0;i<m;i++){for(int j=0;j<n;j++){dist[i][j]=-1;}}Queue<int[]> q=new LinkedList<>();q.add(new int[]{x1,y1});dist[x1][y1]=0;while(!q.isEmpty()){int[] temp=q.poll();int a=temp[0]; int b=temp[1];for(int t=0;t<4;t++){int x=a+dx[t]; int y=b+dy[t];if(x>=0&&y>=0&&x<m&&y<n&&arr[x][y]!='*'&&dist[x][y]==-1){dist[x][y]=dist[a][b]+1;if(arr[x][y]!='e') q.add(new int[]{x,y});}}}}
}

题目三:矩阵最长递增路径

题目描述:

给定一个 n 行 m 列矩阵 matrix ,矩阵内所有数均为非负整数。 你需要在矩阵中找到一条最长路径,使这条路径上的元素是递增的。并输出这条最长路径的长度。
这个路径必须满足以下条件:

1. 对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外。
2. 你不能走重复的单元格。即每个格子最多只能走一次。

输入输出描述:

输入描述:
[[1,2,3],[4,5,6],[7,8,9]]

ff7286ebdcb341898284e69cc3d78273.png
输出描述:5(1->2->3->6->9)

题目解析:

核心采用深度优先搜索dfs()

step1:判断特殊情况(空矩阵)

step2:两层for循环遍历每个节点并进行深度优先搜索dfs(),传入的参数有matrix,i,j,lastNum(上一个节点的值),len(路径长度)

step3:dfs()方法的步骤:记录当前的值准备递归——>将走过的路涂黑——>dfs四个方向——>回退记录的值 

step4:在dfs四个方向时注意下标是否越界和遍历到的值是否大于lastNum,这也是终止条件。

作答情况:

终止条件写的时候,只考虑到下标越界没有考虑到遍历到的值是否大于lastNum。

代码:

public class Main {public static int result;public static void main(String[] args) {Scanner in=new Scanner(System.in);int m=in.nextInt();int n=in.nextInt();int[][] matrix=new int[m][n];for(int i=0;i<m;i++){for(int j=0;j<n;j++){matrix[i][j]=in.nextInt();}}for(int i=0;i<m;i++){for(int j=0;j<n;j++){dfs(matrix,i,j,-1,0);}}System.out.println(result);}
private static void dfs(int[][] matrix, int i, int j, int lastNum, int len) {if(i<0||j<0||i>=matrix.length||j>=matrix[0].length||matrix[i][j]<lastNum){result=Math.max(result,len);return;}int temp=matrix[i][j];matrix[i][j]=-1;dfs(matrix,i+1,j,temp,len+1);dfs(matrix,i-1,j,temp,len+1);dfs(matrix,i,j+1,temp,len+1);dfs(matrix,i,j-1,temp,len+1);matrix[i][j]=temp;}
}

收获:

①char类型转化为int类型:将字符减一个‘0’;

int类型转char类型:将数字加一个‘0’,并强制类型转换为char。

②从键盘中读入二维字符数组的写法:

Scanner in=new Scanner(System.in);int m=in.nextInt();int n=in.nextInt();for(int i=0;i<m;i++){char[] temp=in.next().toCharArray();for(int j=0;j<n;j++){arr[i][j]=temp[j];}}

③②从键盘中读入二维整形数组的写法:

 Scanner in=new Scanner(System.in);int m=in.nextInt();int n=in.nextInt();int[][] matrix=new int[m][n];for(int i=0;i<m;i++){for(int j=0;j<n;j++){matrix[i][j]=in.nextInt();}}

 

 

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

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

相关文章

STM32使用旋转编码开关

一、旋转编码开关如何工作 编码器内部有一个开槽圆盘&#xff0c;连接到公共接地引脚 C。它还具有两个接触针 A 和 B&#xff0c;如下所示。 当您转动旋钮时&#xff0c;A 和 B 按照特定顺序与公共接地引脚 C 接触&#xff0c;具体顺序取决于转动旋钮的方向。 当它们与公共地接…

在 package.json 文件中,版本号前的 ^ 符号含义

在 package.json 文件中&#xff0c;版本号前的 ^ 符号有特定的含义&#xff0c;它控制了包依赖的版本范围。 具体来说&#xff0c;^ 符号表示兼容性范围符号&#xff0c;允许安装与指定版本兼容的更新版本。 例如&#xff0c;“vue”: “^3.0.0” 意味着&#xff1a; 可以安…

Web3 游戏平台 Creo Engine 销毁代币总量的20%,以促进长远发展

Creo Engine 5月16日进行了第三次代币销毁&#xff0c;这次的销毁占代币总量的 20%。一共销毁了2亿 $CERO 代币&#xff0c;市场价值接近 2000 万美元。 Creo Engine 致力于连接世界、为玩家提供一站式游戏中心&#xff0c;并提升 Web3 游戏体验。 Creo Engine 发布于2022年&am…

USB抓包工具:bushound安装及使用

一、环境搭建 下载busbound6.01安装包&#xff0c;安装完成&#xff0c;重启电脑。 二、工具配置 按照下图配置工具&#xff1a; 使能自动识别新设备 2. 设置抓取数据的容量 三、抓包 回到capture选项卡&#xff0c;在页面的右下角有个run的按钮&#xff0c;点击使能&…

RedHat9 | 磁盘管理

硬盘分区类型 MBR分区方案 MBR也被称为主引导记录&#xff0c;它存在0柱面0磁道0扇区内&#xff0c;在磁盘的第一个扇区内&#xff0c;大小为512字节 512字节包含&#xff1a;446字节初始化程序加载器、64字节分区表、2字节校验码由于每个分区为16字节&#xff0c;所以MBR只…

Git配置详解

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

js实现元素根据鼠标滚轮滚动向左右上下滑动着从模糊到清楚显示出来

html代码 <div ref{test} id"animatedElement" className"not-animated"> <div style{{width:"100px",height:"50px",backgroundColor:"red"}}> </div> </div> JS代码 const te…

用智能插件(Fitten Code: Faster and Better AI Assistant)修改好了可以持久保存的vue3留言板

天际 第一修改是选项式&#xff1a; <!-- 模板结构 --> <template><div><textarea placeholder"请输入备注内容" v-model"newItem"></textarea><button click"addItem">添加</button><hr><…

Vue2+Element 封装评论+表情功能

有需要的小伙伴直接拿代码即可&#xff0c;不需要下载依赖&#xff0c;目前是初始版本&#xff0c;后期会进行代码的优化。 评论组件如下&#xff1a; 创建 comment.vue 文件。 表情组件 VueEmoji.vue 在评论组件中使用。 <template><div class"comment"…

《主对角线求和》

描述 有一个n行n列的二维数组&#xff0c;请你求出二维数组的主对角线上的所有数字的和是多少。 输入描述 第一行一个整数n&#xff0c;代表下面输入的是n行n列(2≤n≤10)的二维数组&#xff1b; 接下来n行&#xff0c;每行n列&#xff0c;表示二维数组的每个元素各是多少。 …

数字孪生技术在管理中有哪些实际应用?

随着科学技术的不断提高&#xff0c;数字孪生技术也在不断的从理论应用至现实&#xff0c;并且涉及领域较为广泛。 在生产运营管理层面&#xff0c;通过构建数字孪生模型&#xff0c;企业可以精准模拟和优化生产线&#xff0c;实现生产流程的智能化和高效化。比如&#xff0c;…

TypeScript-搭建编译环境

搭建编译环境 TypeScript 编写的代码是无法直接在js引擎( 浏览器 / Nodejs )中运行的&#xff0c;最终还需要经过编译成js代码才可以正常运行 搭建手动编译环境 1️⃣ 全局安装 typescript 包&#xff08;编译引擎&#xff09; -> 注册 tsc 命令 npm i -g typescript 2…

下拉框操作/键鼠操作/文件上传

在我们做UI自动化测试的时候&#xff0c;会有一些元素需要特殊操作&#xff0c;比如下拉框操作/键鼠操作/文件上传。 下拉框操作 在我们很多页面里有下拉框的选择&#xff0c;这种元素怎么定位呢&#xff1f;下拉框分为两种类型&#xff1a;我们分别针对这两种元素进行定位和…

2024最新 Jenkins + Docker 实战教程(五)- 配置Gitee Webhooks实现自动构建部署

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Packet Tracer-HSRP+DHCPv4+VLAN间路由+以太通道综合实验

实验拓扑&#xff1a; 实验内容&#xff1a; VLAN及VLAN间路由的配置&#xff0c;以太通道的配置&#xff0c;STP的根调整&#xff0c;DHCPv4的配置&#xff0c;首跳冗余HSRP的配置。 实验最终结果&#xff1a; PC可以自动获取到DHCP-Server分配的IP地址&#xff0c;实现首跳…

【Sentinel】Sentinel配置zk持久化

代码 import cn.hutool.core.util.StrUtil; import com.alibaba.csp.sentinel.datasource.ReadableDataSource; import com.alibaba.csp.sentinel.datasource.zookeeper.ZookeeperDataSource; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; import com.a…

信息系统工程师--八大绩效域-交付绩效域

信息系统工程师的八大绩效域包括&#xff1a;干系人、团队、开发方法和生命周期、项目工作、规划、交付、度量、不确定性。 预期目标 1、项目有助于实现业务目标和战略 2、项目实现了预期成果 3、在预定时间内实现了项目收益 4、项目团队对需求有清晰的理解 5、干系人接受…

GitLab的原理及应用详解(五)

本系列文章简介: 随着软件开发的不断进步和发展,版本控制系统成为了现代软件开发过程中不可或缺的一部分。而GitLab作为其中一种流行的版本控制工具,在软件开发领域享有广泛的应用。GitLab不仅提供了强大的版本控制功能,还集成了项目管理、持续集成和部署、代码审查等多个功…

web学习笔记(五十七)

目录 1. 面试题总结 1.1 public和assets区别 1.2 vite的作用 1.3 vue单页面应用 1.4 组件分为两种类型&#xff1a; 1.5 App.vue文件 1.6 main.js 1.7 vue2中为什么不能直接监听到数组的改变&#xff1f; 2. .vue页面的组成 3. ref 响应式数据 1. 面试题总结 1.1…

Web3革命:探索科技与物联网的无限可能

引言 Web3时代正在悄然而至&#xff0c;带来了对互联网的彻底颠覆和改变。作为互联网的下一代&#xff0c;Web3不仅是技术革新的延续&#xff0c;更是对传统互联网模式的重新构想。在这个新时代&#xff0c;科技与物联网的结合将迎来无限的可能性&#xff0c;将探索到一片全新…