0x00 引言
爲獲取一個良好的算法思維,以及不再成爲一個腳本小子,爭取每天一道算法題,培養自己的邏輯思維,溫顧各類型語言語法知識。
題解只寫自己理解的解法,其他解法不再增加。題目與解析均在代碼裏面。
0x01 難度等級
簡單
0x02 代碼
package 簡單; import java.util.Scanner; /* * 描述 現在有一種密碼變換算法。 九鍵手機鍵盤上的數字與字母的對應: * 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0, * 把密碼中出現的小寫字母都變成九鍵鍵盤對應的數字,如:a 變成 2,x 變成 9. 而密碼中出現的大寫字母則變成小寫之後往後移一位, * *如:X ,先變成小寫,再往後移一位,變成了 y ,例外:Z 往後移是 a 。 是X的ascii碼值加32再+1(a是97 A是65,所以是差變成小a需要加32),因爲往後移動了一位 ,需要再加1 * 數字和其它的符號都不做變換。 數據範圍: 輸入的字符串長度滿足 1 \le n \le 100 \1≤n≤100 輸入描述: 輸入一組密碼,長度不超過100個字符。 輸出描述: 輸出密碼變換後的字符串 示例1 輸入: YUANzhi1987 輸出: zvbo9441987 * * * * */ public class 簡單密碼 { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); Scanner s = new Scanner(System.in); String s1 = s.nextLine(); char[] m=new char[s1.length()]; for (int i = 0; i < s1.length(); i++) { m[i]=(char)getI(s1.charAt(i)); // System.out.println(m[i]); } // System.out.println("------------"); for (int i = 0; i < m.length; i++) { System.out.print(m[i]); } } public static int getI(char i) { if (i >='A' && i <='Y') { return (char) (i + 33); } else if (i == 'Z') { return 'a'; } else if(i >='a' && i <='z'){ switch (i) { case 'a': case 'b': case 'c': return '2'; case 'd': case 'e': case 'f': return '3'; case 'g': case 'h': case 'i': return '4'; case 'j': case 'k': case 'l': return '5'; case 'm': case 'n': case 'o': return '6'; case 'p': case 'q': case 'r': case 's': return '7'; case 't': case 'u': case 'v': return '8'; default: return '9'; } }else { return i; } } }
0x03 算法思想
(1)考查對Ascii碼錶的瞭解
(2)考查對switch/case穿透的使用