day42—编程题

news/2024/11/1 14:41:38/

文章目录

  • 1.第一题
    • 1.1题目
    • 1.2思路
    • 1.3解题
  • 2.第二题
    • 2.1题目
    • 2.2思路
    • 2.3解题

1.第一题

1.1题目

描述:
nowcoder要和朋友交流一些敏感的信息,例如他的电话号码等。因此他要对这些敏感信息进行混淆,比如在数字中间掺入一些额外的符号,让它看起来像一堆乱码。
现在请你帮忙开发一款程序,解析从nowcoder那儿接收到的信息,读取出中间有用的信息
输入描述:
输入有多行
每一行有一段经过加密的信息(其中可能包含空格),并且原始信息长度不确定
输出描述:
输出每段信息中数字信息

1.2思路

  1. 遍历字符串,如果是数字就进行拼接

1.3解题

import java.util.*;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){String str = sc.nextLine();StringBuffer sb = new StringBuffer();for(int i = 0;i < str.length();i++){if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){sb.append(str.charAt(i));}}System.out.println(sb);}}
}

2.第二题

2.1题目

描述:
NowCoder最喜欢游乐场的迷宫游戏,他和小伙伴们比赛谁先走出迷宫。
现在把迷宫的地图给你,你能帮他算出最快走出迷宫需要多少步吗
输入描述:
输入包含多组数据
每组数据包含一个10*10,由“#”和“.”组成的迷宫。其中“#”代表墙;“.”代表通路
入口在第一行第二列;出口在最后一行第九列
从任意一个“.”点都能一步走到上下左右四个方向的“.”点
输出描述:
对应每组数据,输出从入口到出口最短需要几步

2.2思路

  1. 采用广度优先遍历的方法找到出迷宫的最短路径
  2. 将入口放入队列,对该位置进行标记,只要队列不为空,从队列中取出当前位置,计算该位置的上、下、坐、右四个方向,计算要走的下一步;如果下一步在出口的位置,已经找到返回所走步数level;如果该位置有效且不是墙且没有走过将该位置入队列,再继续其他几个方向

2.3解题

import java.util.*;
class Node{public int x;public int y;public int level;public Node(){}public Node(int x,int y,int level){this.x = x;this.y = y;this.level = level;//该点距离入口的距离}
}
public class Main {// 求迷宫的最短路径public static int minLevel(String[] map,int m,int n){// 移动方向:下、右、左、上int[][] diect = {{1,0},{0,1},{0,-1},{-1,0}};// 存放出迷宫的最短路径Queue<Node> queue = new LinkedList<>();// 标记该位置是否走过boolean[][] flg = new boolean[m][n];// 定义起始位置和出口Node enter = new Node(0,1,0);Node out = new Node(9,8,0);// 将起始位置放入队列中queue.offer(enter);while(!queue.isEmpty()){Node cur = queue.poll();// 标记当前位置已经走过flg[cur.x][cur.y] = true;// 如果当前位置是出口,返回当前位置的levelif(cur.x == out.x && cur.y == out.y){return cur.level;}// 遍历当前位置的四个方向Node next = new Node();for(int i = 0;i < 4;i++){next.x = cur.x + diect[i][0];next.y = cur.y + diect[i][1];// 判断下一个位置是否合法且是通路且没有走过if(next.x >= 0 && next.x < m && next.y >= 0 && next.y < n && map[next.x].charAt(next.y) == '.' && !flg[next.x][next.y]){// 距离加1next.level = cur.level + 1;// 并将下一个位置放入队列中queue.offer(new Node(next.x,next.y,next.level));}}}return 0;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){String[] map = new String[10];// 接收每一行迷宫for(int i = 0;i < 10;i++){map[i] = sc.nextLine();}// 采用广度优先遍历的方法找到出迷宫的最短路径System.out.println(minLevel(map,10,10));}}
}

http://www.ppmy.cn/news/60535.html

相关文章

MySQL基础篇3

MySQL基础 1. 创建和管理库表1.1 创建和管理数据库1.1.1 创建数据库1.1.2 使用数据库1.1.3 修改数据库1.1.4 删除指定数据库 1.2 创建和管理数据表1.2.1 创建数据表1.2.2 查看数据表相关信息1.2.3 修改数据表1.2.3.1 新增列1.2.3.2 修改列1.2.3.3 删除列1.2.3.4 重命名列 1.2.4…

基于C#开发 B/S架构的实验室管理系统 云LIS系统(MVC + SQLserver + Redis)

一、云LIS系统是将各种样本、免疫、临检、放免、及实验用的分析仪器&#xff0c;通过网络管理和传输实验分析过程中全部数据。对每一专业&#xff0c;实现检验申请、样本采集、样本核收、联机检验、质量控制、报告审核到报告发布的全环节的信息化管理平台。 二、基于B/S架构的云…

项目中常见的几种策略模式实现方式

前言 本篇文章主要介绍本人在自己项目中和开源项目中策略模式的实现方式 基于spring实现策略模式 最近在使用nacos-sync同步工具时发现其使用了策略模式&#xff0c;下面主要介绍它是如何使用的 实现步骤 2.1 定义接口&#xff1a;SyncService public interface SyncService …

鸿蒙Hi3861学习八-Huawei LiteOS(事件标记)

一、简介 事件是一种实现任务间通信的机制&#xff0c;可用于实现任务间的同步。但事件通信只能是事件类型的通信&#xff0c;无数据传输。一个任务可以等待多个事件的发生&#xff1a;可以是任意一个事件发生时唤醒任务进行事件处理&#xff1b;也可以是几个事件都发生后才唤醒…

grep命令与正则表达式,快速学习正则表达式

1.了解grep命令常用操作 命令格式 grep [options] pattern [files]pattern&#xff1a;要查找的字符串或正则表达式。files&#xff1a;要查找的文件名&#xff0c;可以同时查找多个文件&#xff0c;如果省略 files 参数&#xff0c;则默认从标准输入中读取数据。 常用选项 …

FreeRTOS 任务通知

文章目录 一、任务通知简介二、发送任务通知1. 函数 xTaskNotify()2. 函数 xTaskNotifyFromISR()3. 函数 xTaskNotifyGive()4. 函数 vTaskNotifyGiveFromISR()5. 函数 xTaskNotifyAndQuery()6. 函数 xTaskNotifyAndQueryFromISR() 三、任务通知通用发送函数1. 任务级任务通知通…

运算符重载和重载函数

1.运算符重载的意义 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c;也具有其返回值类型&#xff0c;函数名字以及参数列表&#xff0c;其返回值类型与参数列表与普通的函数类似。 函数名字为&#xff1a;关键字operator后面…

汇编语言学习笔记四

字符 字符是以ASCII码的形式存储的&#xff0c;一个字符对应着8为二进制数&#xff0c;2位16进制数。 所以可以得到对应的字符地址。 assume ds:data data segmentdb hellodb world data endsand or指令 根据ASCII码&#xff0c;字符的大写和小写相差一个0010 0000&#xff…