JAVA洛谷B2116 加密的病历单

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

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

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

  1. 原文中所有的字符都在字母表中被循环右移了三个位置(dec→ghf)

  2. 逆序存储(abcd→dcba)

  3. 大小写反转(abXY→ABxy)

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

源码

import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		int len = str.length();
		int[] result = new int[len+1];
		//获取ASCII
		for(int i=0;i<len;i++) {
			String ch = str.substring(i,i+1);
			result[i] = ch.charAt(0);
		}
		//转换大小写
		for(int i=len-1;i>=0;i--) {
			if(result[i]>='a' && result[i]<='z') {
				result[i] -= 32;
			}else {
				result[i] += 32;
			}
		}
		//右移3位,即ASCII+3,若y/Y和z/Z+3超出,则减去26。
		for(int i=len-1;i>=0;i--) {
			if(result[i]>='x' && result[i]<='z') {
				result[i] -= 26;
			}else if(result[i]>='X' && result[i]<='Z'){
				result[i] -= 26;
			}
			result[i] += 3;
		}
		//逆序输出
		for(int i=len-1;i>=0;i--) {
			System.out.print((char)result[i]);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值