现在的位置: 首页 > 综合 > 正文

如何编码?(简单字符串的模拟)

2018年04月28日 ⁄ 综合 ⁄ 共 1416字 ⁄ 字号 评论关闭

如何编码?

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的加密方法对名字进行加密。

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;
}

抱歉!评论已关闭.