【题目描述】
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)
1.原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
2.逆序存储(abcd -> dcba )
3.大小写反转(abXY -> ABxy)
【输入】
一个加密的字符串。(长度小于50且只包含大小写字母)
【输出】
输出解密后的字符串。
【输入样例】
GSOOWFASOq
【输出样例】
Trvdizrrvj
// ybt.ssoier.cn 1137
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[51];
cin>>s;
int len=strlen(s);
for(int i=0;i<=len-1;i++){
if(s[i]>='x'&&s[i]<='z' || s[i]>='X'&&s[i]<='Z') s[i]-=23;
else s[i]+=3;
for(int j=0;j<=len/2-1;j++){
s[j]=s[len-1-j];
}
if(s[i]>='A' && s[i]<='Z') s[i]+=32;
else s[i]-=32;
}
cout<<s;
return 0;
}
#include<iostream>
using namespace std;
void countsort(int a[],int b[],int n)
{
//遍历每一趟
int count=0;
for(int i=0;i<n;i++)
{
//找到每个元素小的个数
count = 0;
for(int j=0;j<n;j++)
{
if(a[j]<a[i]) count++;
}
b[count] = a[i];
}
}
int main()
{
int a[6]={3,5,7,2,4,9},b[6];
countsort(a,b,6);
for(int i=0;i<6;i++) cout<<b[i]<<" ";
return 0;
}
else s[i]+=3;
为啥不是x到z之间的字符就变成右移三位了呢?
if(s[i] >='A' && s[i] <='Z')
s[i] = (s[i] - 'A' - 3 + 26)%26 + 'A';
else
s[i] = (s[i] - 'a' - 3 + 26)%26 + 'a';
///////////////////////
for(int j=0;j<=len/2-1;j++){
s[j]=s[len-1-j];
}
这逆序写的也不对啊,根本没有交换啊
for(int j=0;j<=len/2-1;j++){
char c = s[j];
s[j]=s[len-1-j];
s[len-i-j] = c;
}