牛客华为在线编程题----简单密码破解

首先题目如下:

/**
 * 
 * 假设渊子原来一个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     }

 

posted @ 2016-02-29 22:43  L_Sivan  阅读(727)  评论(0编辑  收藏  举报