• 加密的病历单


    加密的病历单

    加密的病历单
    查看提交统计提问
    总时间限制: 1000ms 内存限制: 65536kB
    描述
    小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
    在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
    经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)
    1. 原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
    2. 逆序存储(abcd -> dcba )
    3. 大小写反转(abXY -> ABxy)

    输入
    一个加密的字符串。(长度小于50且只包含大小写字母)
    输出
    输出解密后的字符串。
    样例输入**
    GSOOWFASOq
    样例输出
    Trvdizrrvj

    首先我们要解决三个问题,我们可以先对这三个问题进行排序,发现第二个逆序存储可以在最后的输出环节解决
    接下来就是要解决相对而言更加复杂的左移,可以考虑用if语句,对dz和DZ减去3左移,对接下来的再进行考虑,可以在左移的同时大小写反转,这里可能就要用到4重if语句来判断,
    这里还有一个巧妙的方法,利用数组来进行转换。

    #include<iostream>
    #include<cstring>
    using namespace std;
    char A[26]={'D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C'};
    char a[26]={'d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c'};
    int main()
    {
    	char n[100];
    	cin>>n;
    	int longs=strlen(n);
    	for(int i=0;i<longs;i++) {
    		if(n[i]>='a'&&n[i]<='z')//在左移的同时进行大小写转换。
    			n[i]=A[n[i]-'a'];
    		else
    			n[i]=a[n[i]-'A'];
    	}
    	for(int i=longs-1;i>=0;i--)//输出环节来实现反转。
    		cout<<n[i];
    	cout<<endl;
    	return 0;
    }
    

    减少了多支语句的判断,便于理解

  • 相关阅读:
    在日志中记录Java异常信息的正确姿势
    基于Spring Boot架构的前后端完全分离项目API路径问题
    Spring生态简介
    WebSocket协议入门介绍
    Spring Boot程序正确停止的姿势
    python 中 __init__方法
    python中的if __name__ == 'main'
    python 类和实例
    内建模块 datetime使用
    内建模块collections的使用
  • 原文地址:https://www.cnblogs.com/lifehappy/p/12601210.html
Copyright © 2020-2023  润新知