日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【2022华为od机试题】【JAVA】【刷题子】华为od机试题:磁盘容量排序(AC:100%)

發布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【2022华为od机试题】【JAVA】【刷题子】华为od机试题:磁盘容量排序(AC:100%) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(注意:答案僅作為參考,但不作為最優解;實際機試中下面代碼ac通過率:100%。如有更好優化的空間歡迎文章下方進行留言討論)

一、題目與題目分析

題目

磁盤的容量v是有M、G、T三個等級的單位。(其中1T=1024G,1G=1024M)
  第一行輸入n,代表有n個容量值需要進行排序。
  再輸入對應n行的容量值。
  最后輸出從小到大排序好的容量值。
  (注:如果出現多個(兩個或兩個以上)容量值相同,需要按照輸入順序來輸出。如1025M,1M1G,1G1M;這仨都一樣的容量值,但1025M先輸入,所以輸出順序為:1025M,1M1G,1G1M)
  例1:

輸入: 3 1G 2G 1024M輸出: 1G 1024M 2G

例2:

輸入: 5 4G2M 3M4G 2T 10G 2010M輸出: 2010M 4G2M 3M4G 10G 2T

解題思路

這道題由于需要有輸入順序,而且容量單位的順序不分前后(如:1G1M和1M1G,是一樣的容量值)。
  因此,決定先把所有值進行轉化為最小單位 M 對應的值,再進行處理和排序。

二、整體邏輯與完整代碼

整體邏輯

① 聲明 Map<Integer, List<String>>(key:化為單位 M 容量的數值;value:加入順序)
② 聲明 List<Integer> 記錄化為單位 M 容量的數值(這里要去重)
③ 寫當前的容量換算為最小單位M對應的容量的方法(如:2G1M = 1024*2 + 1 = 2049M )
④ 在遍歷所有值進行轉化為最小單位 M 對應的值時,map為空,創建list<String>;并把對應的 key 也塞到 List<Integer>記錄中。
⑤ 最后,再對記錄進行排序,遍歷對應的值即可。(具體更為詳細的可結合完整代碼來看)

完整代碼

整體邏輯清晰了之后,同時也有較清楚的注釋。直接來看代碼吧! (如有不懂的或者更好的建議,歡迎評論區分享友友的看法哈~)

package com.anpai.nanfangzhe.work; import java.util.*;public class Demo {public static void main(String[] args) {Scanner sc = new Scanner(System.in);sortMGT(sc);}// 1. 磁盤容量排序(AC:100%)public static void sortMGT(Scanner sc) {String n = sc.nextLine();String[] strs = new String[Integer.valueOf(n)];for (int i = 0; i < Integer.valueOf(n); i++) {strs[i] = sc.nextLine();}// key:化為容量(單位:M);value:加入順序Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();// 記錄化為對應最小單位M的容量下標List<Integer> numList = new ArrayList<>();for (String str : strs) {// System.out.println(str);Integer mSum = getMSum(str);List<String> list = map.get(mSum);if (list == null) {// 為空創建新數組list = new ArrayList<String>();// 記錄當前換算為最小單位的MnumList.add(mSum);}// list數組里添加對應的容量list.add(str);// 往map塞(key:最小單位對應的容量數值mSum;value:list)map.put(mSum, list);}// 數組進行從小到大排序numList.sort(null);for (Integer num : numList) { // 遍歷numList數組(從小到大)List<String> list = map.get(num); // list已按照添加順序記錄,再遍歷list輸出即可for (String str : list) {System.out.println(str);}// System.out.println("mSum:" + num);}}// 把當前的容量換算為最小單位M對應的容量(如:2G1M = 1024*2 + 1 = 2049M )public static Integer getMSum(String str) {// 遍歷容量逐個字符,數字進行拼接添加記錄,碰上單位就結算一次。最終轉化為最小單位M對應的容量數值int mSum = 0;String numStr = "";for (char ch : str.toCharArray()) {if (ch == 'M') {// 碰上'M'單位了,直接轉換,并把 numStr重新置空mSum += Integer.valueOf(numStr);numStr = "";} else if (ch == 'G') {// 碰上'G'單位了,轉換后再乘上 1024,并把 numStr重新置空mSum += Integer.valueOf(numStr) * 1024;numStr = "";} else if (ch == 'T') {// 碰上'T'單位了,轉換后再乘上 1024 * 1024,并把 numStr重新置空mSum += Integer.valueOf(numStr) * 1024 * 1024;numStr = "";} else {// 是數字,numStr進行拼接添加numStr += ch;}}// 最小單位對應的容量數值return mSum;} }

文章小尾巴

文章寫作、模板、文章小尾巴可參考:《寫作“小心思”》

  感謝你看到最后,最后再說兩點~
  ①如果你持有不同的看法,歡迎你在文章下方進行留言、評論。
  ②如果對你有幫助,或者你認可的話,歡迎給個小點贊,支持一下~
  我是南方者,一個熱愛計算機更熱愛祖國的南方人。

  (文章內容僅供學習參考,如有侵權,非常抱歉,請立即聯系作者刪除。)

總結

以上是生活随笔為你收集整理的【2022华为od机试题】【JAVA】【刷题子】华为od机试题:磁盘容量排序(AC:100%)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。