算法题-密码变换算法
1. 题目描述
现在有一种密码变换算法。
九键手机键盘上的数字与字母的对应: 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个字符。
输出描述: 输出密码变换后的字符串
2. 解答题目
package main import ( "fmt" "strings" ) func main() { m := map[string]byte{ "abc": 50, "def": 51, "ghi": 52, "jkl": 53, "mno": 54, "pqrs": 55, "tuv": 56, "wxyz": 57, } var s string fmt.Scan(&s) bt := make([]byte, 0) for i := 0; i < len(s); i++ { switch { //处理大写字母 case s[i] >= 'A' && s[i] <= 'Z': if s[i] != 'Z' { bt = append(bt, s[i]+33) } else { bt = append(bt, 'a') } //处理小写字母 case s[i] >= 'a' && s[i] <= 'z': for k, v := range m { if strings.Contains(k, string(s[i])) { bt = append(bt, v) } } //处理数字 default: bt = append(bt, s[i]) } } fmt.Println(string(bt)) }