今日刷三題(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.pswp.cn/web/14373.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14373.shtml
英文地址,請注明出處:http://en.pswp.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;將探索到一片全新…