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穿透的使用