华为机试:简单密码破解、字符串通配符

来源:互联网 发布:android登陆界面源码 编辑:程序博客网 时间:2024/06/05 19:11

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;    }}


原创粉丝点击