华为机试:简单密码破解、字符串通配符
2017-07-09 16:02
302 查看
1.简单密码破解
题目描述密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。
假设渊子原来一个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哦。
输入描述:
输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾
输出描述:
输出渊子真正的密文
示例1
输入
YUANzhi1987
输出
zvbo9441987
import java.util.Scanner; public class Main{ public static void main(String []args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){ String str=sc.nextLine(); System.out.println(getStr(str)); } } public static String getStr(String s){ StringBuffer sb=new StringBuffer(); char []arr=s.toCharArray(); for(int i=0;i<arr.length;i++){ //Z单独判断 if(arr[i]=='Z'){ sb.append("a"); }else if(arr[i]>=65&&arr[i]<=90){ char temp=(char)(arr[i]+33); sb.append(temp); }else if(arr[i]>=97&&arr[i]<=99){ sb.append(2); }else if(arr[i]>=100&&arr[i]<=102){ sb.append(3); }else if(arr[i]>=103&&arr[i]<=105){ sb.append(4); }else if(arr[i]>=106&&arr[i]<=108){ sb.append(5); }else if(arr[i]>=109&&arr[i]<=111){ sb.append(6); }else if(arr[i]>=112&&arr[i]<=115){ sb.append(7); }else if(arr[i]>=116&&arr[i]<=118){ sb.append(8); }else if(arr[i]>=119&&arr[i]<=122){ sb.append(9); }else if(arr[i]>=48&&arr[i]<=57){ sb.append(arr[i]); } } return sb.toString(); } }
2.字符串通配符
题目描述问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
*:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)
?:匹配1个字符
输入:
通配符表达式;
一组字符串。
输出:
返回匹配的结果,正确输出true,错误输出false
输入描述:
先输入一个带有通配符的字符串,再输入一个需要匹配的字符串
输出描述:
返回匹配的结果,正确输出true,错误输出false
示例1
输入
te?t*.* txt12.xls
输出
false
import java.util.Scanner; public class Main{ public static void main(String []args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){ String str1=sc.next(); String str2=sc.next(); System.out.println(match(str1,str2)); } } private static boolean match(String s1,String s2){ int i=0,j=0; while(i<s1.length()&&j<s2.length()){ if(s1.charAt(i)=='?'){ i++; j++; }else if(s1.charAt(i)=='*'){ if((s2.charAt(j)>='a'&&s2.charAt(j)<='z')||(s2.charAt(j)>='A'&&s2.charAt(j)<='Z') ||(s2.charAt(j)>='0')&&s2.charAt(j)<='9'){ j++; } i++; }else{ if(s1.charAt(i)==s2.charAt(j)){ i++; j++; }else{ return false; } } } return true; } }
相关文章推荐
- Java - 华为机试训练 - 简单密码破解
- [华为机试练习题]4.简单密码破解
- 华为 oj 简单密码破解&&汽水瓶&&删除字符串中出现次数最少的字符&&字符串排序
- Java - 华为机试训练 - 简单密码破解
- 牛客网_华为机试_021_简单密码破解(字符映射)
- 华为机试-字符串运用密码截取
- 简单密码破解-华为OJ题
- 华为oj【简单密码破解】
- 华为机试——简单密码
- 华为OJ中级题-简单密码破解
- 【华为oj】简单密码破解
- 【华为机试】简单密码
- 【华为机试】简单密码
- 华为机试:统计每个月兔子的总数、 字符串运用-密码截取
- 华为OJ(简单密码破解)
- 《华为机试在线训练》之简单密码
- 华为机试---字符串运用-密码截取
- 华为机试——简单密码破译
- 华为oj中级 简单密码破解
- 【华为机试】字符串运用-密码截取