测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A24166. 加密的病历单

填空题 中等

题目描述

加密的病历单

题目描述

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

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

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

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

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

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

输入

一个加密的字符串。(长度小于50且只包含大小写字母)

输出

输出解密后的字符串。

输入样例

GSOOWFASOq

输出样例

Trvdizrrvj

参考答案

#include <bits/stdc++.h> using namespace std; void reverse(char s[])//倒序 { int len = strlen(s); for(int i = 0; i < len/2; ++i) swap(s[i], s[len - 1 - i]); } void changeCase(char s[])//大小写转换 { int len = strlen(s); for(int i = 0; i < len; ++i) { if(isupper(s[i])) s[i] = tolower(s[i]); else if(islower(s[i])) s[i] = toupper(s[i]); } } void moveRight(char s[])//字母右移3位 { int len = strlen(s); for(int i = 0; i < len; ++i) { if(isupper(s[i])) s[i] = (s[i] - 'A' + 3) % 26 + 'A'; else if(islower(s[i])) s[i] = (s[i] - 'a' + 3) % 26 + 'a'; } } int main() { char s[55]; cin>>s; moveRight(s); changeCase(s); reverse(s); cout<<s; return 0; }

答案解析


#include<bits/stdc++.h>
using namespace std;
int main()
{
	char s[55], r[55], c;//s:输入的字符串 r:结果字符串
	cin>>s;
	int len = strlen(s), r_i = 0;//r_i:数组r的下标
	for(int i = len - 1; i >= 0; i--)//由于是逆序存储,所以从后向前遍历
	{
		c = s[i];
		if(c >= 'a' && c <= 'z')//字母向右移3个位置 并转换大小写 
			c = (c - 'a' + 3) % 26 + 'A';
		else if(c >= 'A' && c <= 'Z')
			c = (c - 'A' + 3) % 26 + 'a';
		r[r_i++] = c; 
	} 
	r[r_i] = '\0';
	cout<<r;
	return 0;
}


上一题 下一题