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

首先题目如下:

/**
 *
 * 假设渊子原来一个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     }
时间: 2024-10-26 23:25:22

牛客华为在线编程题----简单密码破解的相关文章

牛客网在线判题系统JavaScript(V8)使用

JavaScript作为一种弱类型的编程语言,语法和C/C++.JAVA等存在差别,但是对于大部算法题,不只是C/C++.JAVA,也依然可以使用JavaScript来实现.所以在牛客网中,如果你喜欢JavaScript这门编程语言,同时对数据结构与算法感兴趣,当然可以使用这门语言去刷编程题. 大家有没有跟我碰到过和我类似的情况,在牛客网刷编程题的时候,编译器提供的是Javascript(v8 6.0.0),在线编程部分前端编程还好,只用在题目给出的函数中补充就行.但苦恼的是,我们不知道如何像C

牛客网在线编程:星际穿越

题目描述: 航天飞行器是一项复杂而又精密的仪器,飞行器的损耗主要集中在发射和降落的过程,科学家根据实验数据估计,如果在发射过程中,产生了 x 程度的损耗,那么在降落的过程中就会产生 x2 程度的损耗,如果飞船的总损耗超过了它的耐久度,飞行器就会爆炸坠毁.问一艘耐久度为 h 的飞行器,假设在飞行过程中不产生损耗,那么为了保证其可以安全的到达目的地,只考虑整数解,至多发射过程中可以承受多少程度的损耗?输入描述:每个输入包含一个测试用例.每个测试用例包含一行一个整数 h (1 <= h <= 10^

牛客网在线编程:统计回文数

题目描述: "回文串"是一个正读和反读都一样的字符串,比如"level"或者"noon"等等就是回文串.花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B.现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串.你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串.如果字符串B插入的位置不同就考虑为不一样的办法.例如:A = "aba",B = "b&

牛客网在线编程:公共字符

题目描述: 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变成"Thy r stdnts."输入描述:每个测试输入包含2个字符串输出描述:输出删除后的字符串示例1输入 They are students. aeiou输出 Thy r stdnts. 思路: 字符串操作处理.contains函数,replace,replaceAll,subSt

牛客网在线编程:分苹果

题目描述: n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1.输入描述:每个输入包含一个测试用例.每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100).输出描述:输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则

牛客网在线编程:n个数中出现次数大于等于n/2的数

题目描述: 输入n个整数,输出出现次数大于等于数组长度一半的数.输入描述:每个测试输入包含 n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2.输出描述:输出出现次数大于等于n/2的数.示例1输入 3 9 3 2 5 6 7 3 2 3 3 3输出 3 思路: 每次输入,使用数组a[n]记录n出现的次数,num记录总数.然后判断a[i]是否大于等于num/2.是的话返回i即可剑指offer上的思路是保存两个值,当接下来出现的下一个数与前一个数相同时,计数加一,否则减一.

OJ刷题---简单密码破解

题目要求: 输入代码: #include<iostream> #include <cstdio> #include <cstring> using namespace std; int main() { char str[100]; int i; gets(str); i=0; while(str[i]!='\0') { if(str[i]>='A'&&str[i]<='Y') { str[i]=str[i]+33; } else if(st

2018阿里巴巴在线编程题

在其他博客上看到一道 "2018阿里巴巴在线编程题" 我记得题目大概是这样的:输入数据n(n>=6)代表n个数,从0-9任意输入n个数,然后在n个数选出6个数xx-xx-xx表示 时:分:秒,求出最小时间和最大时间,若时间无效,则输出时间无效,例如: 输入: 6 6 5 4 3 2 1 输出: 123456 235641 输入: 6 9 9 9 9 9 9 输出: 时间无效 看着有点意思,就自己做了一遍,输出格式自己美化了一下,没有严格按照题目要求.代码如下: def find_

[华为机试练习题]4.简单密码破解

题目 描述: 密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了.哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全. 假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码. 他是这么变换的,大家都知道手机上的字母: 1–1, abc–2, def–3, ghi–4, jkl–5, mno–6,