如何编码?
Time Limit: 1000ms
Memory Limit: 65535KB
64-bit integer IO format: %lld
Java class name: Main
Clm高中同桌特别喜欢数学,他的QQ登陆密码是用他的名字经过数学方法加密后得到的字符串,虽然记起来没什么规律,但他对于这种方法乐此不疲。他告诉clm他加密后的字符串,一脸坏笑的问“你知道我是怎样加密的吗?”clm想了一下并没有直接回答,而是用他的加密方法给另一个同学的名字进行了加密,得到了一个新的密码,从而回答了他的问题。
名字:Qin Weize
密码:Qkr Cmsls
名字:Zhao Xiao nan
密码:Zjeu Fsmc dsh
从以上两个例子中学习clm的加密方法对名字进行加密。
名字:Qin Weize
密码:Qkr Cmsls
名字:Zhao Xiao nan
密码:Zjeu Fsmc dsh
从以上两个例子中学习clm的加密方法对名字进行加密。
Input
第一行输入一个整数n,接下来n行每行是一个名字,只包含大小英文字母和空格,长度不超过80个字符。
Output
对于每个名字,输出一个经过加密的字符串,名字中大写的字母密码中依然大写。
Sample Input
3 Ouyang Wuyou Hao Rongquan Li Jinyu
Sample Output
Owcgvq Iiogo Hcs Xwxseksh Lk Novig
题目大意:
给你一串字符串,然后,让你找出其中的加密方法,对于任意输入的一串字符,输出这个加密后的字符串。。。
解题思路:
其实,只要写出a-z或A-Z的对应关系,就不难看出来,这个字符的对应关系是很简单的,我们只要对于第一个字符在其基础上加2*(i-space)的个数就可以,
因为space的话,不会被参加计算的,但是i的值会增加1,所以使用这个方法,就能够很避免另外在开设一个变量了。
下来就是关于一个字符转化成为另外一个字符的方法了,那就是先找到一个基准,如果以前是大写字母,就找A。如果以前是小写字母, 就找到a。
ch = (ch-'A'+(i-space))%26+'A';
就可以将ch通过某种加密变成另外一个字符了,小写只要把基准改为‘a’,就可以了。
getline(cin,str);就是相当于c语言中的gets(s);因为str中含有空格,所以就会出现这样遇见空格就停止输入的情况。。。
代码:
# include<cstdio> # include<iostream> # include<algorithm> # include<cstring> # include<string> # include<cmath> # include<queue> # include<stack> # include<set> # include<map> using namespace std; # define inf 999999999 string str; int main(void) { int t;cin>>t; getchar(); while ( t-- ) { getline(cin,str); int space = 0; for ( int i = 0;i < str.length();i++ ) { char ch = str[i]; char d; if ( ch <='Z'&&ch >= 'A' ) d = 'A'; else d = 'a'; if ( isalpha(ch) ) { ch = ((ch-d)+(i-space)*2)%26+d; } if ( ch==' ' )space++; printf("%c",ch); } printf("\n"); } return 0; }