问题标题: 酷町堂:2869字符串解密

0
0
已解决
张梓沫
张梓沫
资深守护
资深守护

谁能给我解释一下这道题的样例是如何来的

顺便献上本蒟蒻0分代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string a;
    getline(cin,a);
    int l=a.size();
    for(int i=1;i<=5;i++)
    {
        char x=a[l-1];
        for(int j=l-1;j>=1;j--)
            a[j]=a[j-1];
        a[0]=x;
    }
//    cout<<a<<endl;
    int p=0,q=l-1;
    while(p<q)
    {
        swap(a[p],a[q]);
        p++;
        q--;
    }
//    cout<<a<<endl;
    for(int i=0;i<l;i++)
        if((a[i]>='A'&&a[i]<='Z')&&a[i]%2==0)
            a[i]+=32;
    cout<<a;
    return 0;
}

 

 

em······可能忘了什么

对了

题目链接

其实直接给内容也可以

2869   字符串解密

题目描述 Description

给出一个由小写字母组成的字符串,现在要将它传输给另外一个人。但是为了保密,现在要将这个字符串加密之后再进行传输。加密规则是:

1,先将ASCII码为偶数的小写字母变为大写

2,再将字符串中的数字的位置左右对称地交换位置(对字符串"a1b2c3d4"应用此规则会变为"a4b3c2d1")

3,最后将字符串再向右循环移动5位

现在给出一个经过加密的字符串,请你输出经解密之后的字符串。

输入描述 Input Description

一个经加密的字符串

输出描述 Output Description

经解密的字符串

样例输入 Sample Input

 

a1B2c3D4e5F

样例输出 Sample Output

 

2d1e5fa4b3c

数据范围及提示 Data Size & Hint

注意题目给出的是加密后的字符串,求得是加密前的字符串

 

在线等

刷题中


0
已采纳
左思佑
左思佑
新手守护
新手守护
首先,第三部分加密是最后将字符串再向右循环移动5位,解密就是最后将字符串再向左循环移动5位,即
   for(int i=1;i<=5;i++)
   {
        char x=a[0];
        for(int j=0;j<=a.size()-2;j++)
        {
            a[j]=a[j+1];
        }
        a[a.size()-1]=x;
    }
其次,第二部分将字符串中的数字的位置左右对称地交换位置,应先判断啊a[i]和啊a[j]是否为数字,再swap(a[i],a[j])
int i=0,j=a.size()-1;
    while(i<=j)
    {
        for(;i<a.size()-1;i++)
        {
            if(a[i]>='0'&&a[i]<='9')
            {
                break;
            }       
        }
        for(;j>=0;j--)
        {
            if(a[j]>='0'&&a[j]<='9')
            {
                break;
            }
        }
        if(i<=j)    swap(a[i],a[j]);
        i++;
        j--;
    }

最后,第一部分先将ASCII码为偶数的小写字母变为大写,解密就是先将ASCII码为偶数的打写字母变为小写,比较简单自己编

已给出难点部分,剩下变量、下标问题自己解决

1
1
程飞
程飞
高级光能
高级光能

解密的过程是执行3,2,1的操作顺序,然后操作是原反过来的方式

0
黄昊轩
黄昊轩
中级守护
中级守护

核心代码:

tmp1=a.substr(0,5);
     tmp2=a.substr(5,a.size()-5);
     a=tmp2+tmp1; 
    int i=0,j=a.size()-1;
    while(i<=j) 
    {
        while(i<a.size()&&!(a[i]>='0'&&a[i]<='9'))
        i++;
            while(j>0&&!(a[j]>='0'&&a[j]<='9'))
    j--;
        if(i<=j)  
        {
         swap(a[i],a[j]);
        i++;
        j--;
       }
    } 

0
0
我要回答