如何编码?
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;
}