资深守护
谁能给我解释一下这道题的样例是如何来的
顺便献上本蒟蒻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
注意题目给出的是加密后的字符串,求得是加密前的字符串
在线等
急
刷题中
新手守护
首先,第三部分加密是最后将字符串再向右循环移动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码为偶数的打写字母变为小写,比较简单自己编
已给出难点部分,剩下变量、下标问题自己解决
中级守护
核心代码:
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--;
}
}