牛客华为在线编程题----简单密码破解
首先题目如下:
/** * * 假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987, * 这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。 * * 他是这么变换的,大家都知道手机上的字母: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, * tuv--8 wxyz--9, 0--0,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换, * * 声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先变成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。 * @author L_Sivan */
先来分析下题目,首先必须要区分大小写和数字了,区分的话,上一篇博客已经提到了,剩下的就是大写转变为小写,小写变数字,其实就是这么简单。下面是代码:
1 public class KillPassword { 2 3 public static void main(String[] args){ 4 Scanner sc = new Scanner(System.in); 5 String password = sc.nextLine(); 6 char[] charArray = password.toCharArray(); 7 char[] newPasswordArray = new char[charArray.length]; 8 for(int i = 0;i<charArray.length;i++){ 9 int num = judgeType(charArray[i]); 10 if(num == 1){ 11 char c = big2Small(charArray[i]); 12 newPasswordArray[i] = c; 13 }else if(num == 0){ 14 char c = small2Num(charArray[i]); 15 newPasswordArray[i] = c; 16 }else{ 17 newPasswordArray[i] = charArray[i]; 18 } 19 } 20 System.out.println(newPasswordArray); 21 } 22 23 public static int judgeType(char c){ 24 25 if(c >= 'A' && c <= 'Z'){ 26 return 1; 27 }else if(c >= 'a' && c<= 'z'){ 28 return 0; 29 }else{ 30 return 10; 31 } 32 } 33 34 public static char small2Num(char c){ 35 switch(c){ 36 case 'a': 37 case 'b': 38 case 'c': 39 return '2'; 40 case 'd': 41 case 'e': 42 case 'f': 43 return '3'; 44 case 'g': 45 case 'h': 46 case 'i': 47 return '4'; 48 case 'j': 49 case 'k': 50 case 'l': 51 return '5'; 52 case 'm': 53 case 'n': 54 case 'o': 55 return '6'; 56 case 'p': 57 case 'q': 58 case 'r': 59 case 's': 60 return '7'; 61 case 't': 62 case 'u': 63 case 'v': 64 return '8'; 65 case 'w': 66 case 'x': 67 case 'y': 68 case 'z': 69 return '9'; 70 default: 71 return '0'; 72 } 73 } 74 public static char big2Small(char c){ 75 char[] small = { 76 'a','b','c','d','e','f','g','h', 77 'i','j','k','l','m','n','o','p', 78 'q','r','s','t','u','v','w','x', 79 'y','z' 80 }; 81 char[] big = { 82 'A','B','C','D','E','F','G','H', 83 'I','J','K','L','M','N','O','P', 84 'Q','R','S','T','U','V','W','X', 85 'Y','Z' 86 }; 87 for(int i = 0;i<big.length;i++) 88 if(c == big[i]){ 89 if(c == 'Z') 90 return 'a'; 91 else 92 return small[i + 1]; 93 } 94 return '0'; 95 } 96 }