题解 | #简单密码#
简单密码
http://www.nowcoder.com/practice/7960b5038a2142a18e27e4c733855dac
俺太笨了,只会枚举:
#include<stdio.h>
int main(){
char c;
while(~scanf("%c",&c)){
if(c=='Z')
printf("a");
else if('A'<=c&&c<'Z')
printf("%c",c+33);
else if('a'<=c&&c<='z')
{
if('a'<=c&&c<='c') printf("2");
if('d'<=c&&c<='f') printf("3");
if('g'<=c&&c<='i') printf("4");
if('j'<=c&&c<='l') printf("5");
if('m'<=c&&c<='o') printf("6");
if('p'<=c&&c<='s') printf("7");
if('t'<=c&&c<='v') printf("8");
if('w'<=c&&c<='z') printf("9");
}
else printf("%c",c);
} printf("\n");
}
讨论区学到另一种思路:定义两个字符串,一个是输入的数据集,一个是输出的数据集,每个位置一一对应。对每次输入的数据,在输入数据集中进行查找,若查找成功 则返回输出数据集中对应位置上的数据;若查找失败,则直接输出这个数据(即数字和其他的符号都不做变换):
const string dict1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
const string dict2="bcdefghijklmnopqrstuvwxyza22233344455566677778889999";
char Char_Change(char a){
for(int i=0;i<dict1.size();i++)
if(dict1[i]==a) return dict2[i];
return a;
}