华为机试第二十一题:HJ21 简单密码
一、网址链接
牛客----
二、题目描述
①描述
现在有一种密码变换算法。 九键手机键盘上的数字与字母的对应: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9. 而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。 数字和其它的符号都不做变换。 数据范围: 输入的字符串长度满足1<=n<=100
②输入描述
输入一组密码,长度不超过100个字符。
③输出描述
输出密码变换后的字符串
④示例一
输入: YUANzhi1987 输出: zvbo9441987
三、代码实现
①Java代码实现
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
//获取第i个字符
char c = str.charAt(i);
//判断,处理
if (c >= A && c < Z) {
c = (char) (c + b - A);
} else if (c == Z) {
c = a;
} else if (c>=a && c<=c) {
c = 2;
} else if (c>=d && c<=f) {
c = 3;
} else if (c>=g && c<=i) {
c = 4;
} else if (c>=j && c<=l) {
c = 5;
} else if (c>=m && c<=o) {
c = 6;
} else if (c>=p && c<=s) {
c = 7;
} else if (c>=t && c<=v) {
c = 8;
} else if (c>=w && c<=z) {
c = 9;
}
sb.append(c);
}
System.out.println(sb.toString().trim());
}
}
②C代码实现
#include <stdio.h>
#define MAXS 101
int main(void)
{
int i;
int token;
char str[MAXS];
while(scanf("%s", str) != EOF)
{
i = 0;
while(str[i])
{
if(str[i] >= A && str[i] <= z)
if(str[i] <= Z) // up
{
if(str[i] == Z) str[i] = a;
else str[i] = str[i] + 1 +a - A;
}
else
{
if(str[i] >= a && str[i] <= r)
str[i] = (str[i] -a) / 3 + 2;
else if(str[i] == s) str[i] = 7;
else if(str[i] >=t && str[i] <=v) str[i] = 8;
else str[i] = 9;
}
++i;
}
printf("%s
", str);
}
}
下一篇:
我的算法题——蓝桥杯校选赛
