icode 10 加密的病历单

小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。

在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。

经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)

1.  原文中所有的字符都在字母表中被循环左移了三个位置(dec  -> abz)

如果是x~z,含x和z里(不区分大小写)的字母,他左移三个字母就到了abc,也就是将ASCII-23

如果是a~w,含a和w里(不区分大小写)的字母,他左移三个字母是正常的,也就是将ASCII+3

2.  逆序存储(abcd -> dcba )

按照正常的顺序存的话:s2[i] = s1[i];就可以了

可是要求是逆序存:len表示长度,i表示目前的位置,输入从0开始(待会要-1)

s2[len-i-1] = s1[i];就可以了

3.  大小写反转(abXY -> ABxy)

s[i] 如果是小写的话:s2[len-i-1] = s1[i]-'a'+'A';从小写变大写

s[i] 如果是大写的话:s2[len-i-1] = s1[i]-'A'+'a';从大写变小写

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
char a[50], b[50];
int len = 0;

int main(){
    scanf("%s", a);
    while(a[len] != '\0'){
        len++;
    }
    for(int i = 0;i < len;i++){
        if(a[i] >= 'x' && a[i] <= 'z'){
            b[len-i-1] = a[i] - 'a' + 'A' - 23;
        }else if(a[i] >= 'a' && a[i] <= 'w'){
            b[len-i-1] = a[i] - 'a' + 'A' + 3;
        }else if(a[i] >= 'X' && a[i] <= 'Z'){
            b[len-i-1] = a[i] + 'a' - 'A' - 23;
        }else if(a[i] >= 'A' && a[i] <= 'W'){
            b[len-i-1] = a[i] + 'a' - 'A' + 3;
        }
    }
    for(int i = 0;i < len;i++){
        printf("%c", b[i]);
    }
    return 0;
}

 

posted @ 2020-08-17 20:18  elisa02  阅读(214)  评论(0编辑  收藏  举报