信息学奥赛一本通 1137:加密的病历单 | OpenJudge NOI 1.7 12
【题目链接】
ybt 1137:加密的病历单
OpenJudge NOI 1.7 12:加密的病历单
【题目考点】
1. 字符串处理
【解题思路】
加密过程有三个工序:循环左移,逆序存储,大小写反转。题目中给出的是加密过程,而问题是给出加密后的字符串,让我们解密。所以我们实际要做的解密过程是:循环右移,逆序存储,大小写反转。
- 循环右移3位
以小写字母为例,先将字母a~z转为数字0~25,而后将该值加3,而后模26,即可得到移位后字母的值,最后再将该值转为字母。
大写字母同理。
也可以写判断语句实现。 - 逆序存储
从前向后遍历一半字符串,交换对应字符 - 大小写反转
字符c表示一个字母
大写转小写:c = c - 'A' + 'a'
或tolower(c)
小写转大写:c = c - 'a' + 'A'
或toupper(c)
其中tolower(),toupper()是<cctype>中的函数
【题解代码】
解法1:用函数实现三道工序
#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;
}
解法2:逆序遍历,构造结果字符串
逆序遍历,如果遇到小写字母,变为右移3个位置后的大写字母。如果遇到大写字母,变为右移3个位置后的小写字母。
#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;
}
信息学奥赛一本通 1137:加密的病历单 | OpenJudge NOI 1.7 12相关推荐
- 信息学奥赛一本通 1116:最长平台 | OpenJudge NOI 1.9 12:最长平台 | 洛谷 B2097 最长平台
[题目链接] ybt 1116:最长平台 OpenJudge NOI 1.9 12:最长平台 洛谷 B2097 最长平台 [题目考点] 1. 数组中做统计 2. 求最大值 [解题思路] 解法1:遍历并 ...
- 信息学奥赛一本通 1050:骑车与走路 | OpenJudge NOI 1.4 12
[题目链接] ybt 1050:骑车与走路 OpenJudge NOI 1.4 12:骑车与走路 [题目考点] 1. 两浮点型量判断相等 由于浮点型量在内存中以二进制形式表示,很多数据并不能精确表示( ...
- 信息学奥赛一本通 1227:Ride to Office | OpenJudge NOI 4.6 2404:Ride to Office
[题目链接] ybt 1227:Ride to Office OpenJudge NOI 4.6 2404:Ride to Office 原题是英文题,虽说两题题意相同,但一本通网站没有对该问题进行直 ...
- 信息学奥赛一本通 1404:我家的门牌号 | OpenJudge NOI 2.1 7649:我家的门牌号 | 小学奥数 7649
[题目链接] ybt 1404:我家的门牌号 OpenJudge NOI 2.1 7649:我家的门牌号 OpenJudge NOI 小学奥数 7649:我家的门牌号 注意:一本通OJ和OpenJud ...
- 信息学奥赛一本通 1229:电池的寿命 | OpenJudge NOI 4.6 2469:电池的寿命
[题目链接] ybt 1229:电池的寿命 OpenJudge NOI 4.6 2469:电池的寿命 [题目考点] 1. 贪心 [解题思路] 1. 贪心选择性质的证明 电池分配主要有两步, 第一步:将 ...
- 信息学奥赛一本通 1181:整数奇偶排序 | OpenJudge NOI 1.10 06:整数奇偶排序
[题目链接] ybt 1181:整数奇偶排序 OpenJudge NOI 1.10 06:整数奇偶排序 [题目考点] 1. 排序 [君义精讲]排序算法 [解题思路] 解法1:将奇数和偶数分开,分别排序 ...
- 信息学奥赛一本通 1223:An Easy Problem | OpenJudge NOI 4.6 1455:An Easy Problem
[题目链接] ybt 1223:An Easy Problem OpenJudge NOI 4.6 1455:An Easy Problem [题目考点] 1. 数制 2. 枚举 [解题思路] 解法1 ...
- 信息学奥赛一本通 1177:奇数单增序列 | OpenJudge NOI 1.10 02:奇数单增序列
[题目链接] ybt 1177:奇数单增序列 OpenJudge NOI 1.10 02:奇数单增序列 [题目考点] 1. 排序 [君义精讲]排序算法 [解题思路] 题目中说的是要先取出奇数,再对奇数 ...
- 信息学奥赛一本通 1168:大整数加法 | OpenJudge NOI 1.6 10:大整数加法
[题目链接] ybt 1168:大整数加法 OpenJudge NOI 1.6 10:大整数加法 [题目考点] 1. 高精度 考察:高精加高精 高精度计算讲解 [解题思路] 注意:输入可能有多余的前导 ...
最新文章
- 文件系统与NoSQL分布式存储技术对比
- mysql8.0限制用户只能访问指定数据库,限制用户只有某种权限
- 【专升本计算机】甘肃省普通高等学校专升本考试计算机全真模拟试卷(一)
- python模块(6)-Pandas 简易使用教程
- hortonworks/registry : ClassNotFoundException: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
- php 基础知识 常见面试题
- android服务常驻后台,android-如何始终在后台运行服务?
- KVM的概念和云计算
- 永川机器人五小区_永川清掏化粪池报价---蚂众蚁
- TypeError: Cannot read property ‘forceUpdate‘ of undefined
- [看过不再忘]详细解析chmod修改文件权限
- 啊哈C语言第四章 第九节
- 形如1/(a+bsinx)的积分公式的证明
- Spring Bean生命周期总结
- java实用教程第五版_java2实用教程(第5版)重要点及遗漏点(一)
- android中APK开机自动运行
- HTML实现在线代码格式化、美化、加密、解密、压缩、一键转JavaScript功能工具-toolfk程序员工具网
- solr 通过DIH方式导入创建索引
- FreeMarker教程---Freemarker操作字符串
- Sweet Butter 香甜的黄油