noi题库 1.7 字符串 10到第15题
10:简单密码
描述
Julius Caesar曾经使用过一种很简单的密码。对于明文中的每个字符,将它用它字母表中后5位对应的字符来代替,这样就得到了密文。比如字符A用F来代替。如下是密文和明文中字符的对应关系。
密文
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
明文
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
你的任务是对给定的密文进行解密得到明文。
你需要注意的是,密文中出现的字母都是大写字母。密文中也包括非字母的字符,对这些字符不用进行解码。
输入
一行,给出密文,密文不为空,而且其中的字符数不超过200。
输出
输出一行,即密文对应的明文。
样例输入
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
样例输出
IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
代码实现
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
char a[202],b[202];
int main()
{
gets(a);
int l=strlen(a);
for(int i=1;i<=l;i++)
{
}
for(int i=0;i<l;i++)
if(a[i]>=65&&a[i]<=90)
{
if(a[i]<=69) b[i]=a[i]+21;
else b[i]=a[i]-5;
printf("%c",b[i]);
}
else printf("%c",a[i]);
return 0;
}
11:潜伏者
描述
R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。
历经艰险后,潜伏于S国的R国间谍小C终于摸清了S国军用密码的编码规则:
1、 S国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密后所的内容均由大写字母‘A’—‘Z’构成(无空格等其他字母)。
2、 S国对于每个字母规定了对应的“密字”。加密的过程就是将原信息中的所有字母替换为其对应的“密字”。
3、 每个字母只对应一个唯一的“密字”,不同的字母对应不同的“密字”。“密字”可以和原字母相同。
例如,若规定‘A’的密字为‘A’,‘B’的密字为‘C’(其他字母及密字略),则原信息“ABA”被加密为“ACA”。
现在,小C通过内线掌握了S国网络上发送的一条加密信息及其对应的原信息。小C希望能通过这条信息,破译S国的军用密码。小C的破译过程是这样的:扫描原信息,对于原信息中的字母x(代表任一大写字母),找到其在加密信息中的对应大写字母y,并认为在密码里y是x的密字。如此进行下去直到停止于如下的某个状态:
1、 所有信息扫描完毕,‘A’—‘Z’所有26个字母在原信息中均出现过并获得了相应的“密字”。
2、 所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。
3、 扫描中发现掌握的信息里有明显的自相矛盾或错误(违反S过密码的编码规则)。例如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。
在小C忙得头昏脑胀之际,R国司令部又发来电报,要求他翻译另外一条从S国刚刚截取到的加密信息。现在请你帮助小C:通过内线掌握的信息,尝试破译密码。然后利用破译的密码,翻译电报中的加密信息。
输入
共3行,每行为一个长度在1到100之间的字符串。
第1行为小C掌握的一条加密信息。
第2行为第1行的加密信息所对应的原信息。
第3行为R国司令部要求小C翻译的加密信息。
输入数据保证所有字符串仅由大写字母‘A’—‘Z’构成,且第1行长度与第2行相等。
输出
共1行。
若破译密码停止时出现2,3两种情况,请你输出“Failed”(不含引号,注意首字母大写,其它小写)。
否则请输出利用密码翻译电报中加密信息后得到的原信息。
样例输入
样例 #1:
AA
AB
EOWIE
样例 #2:
QWERTYUIOPLKJHGFDSAZXCVBN
ABCDEFGHIJKLMNOPQRSTUVWXY
DSLIEWO
样例 #3:
MSRTZCJKPFLQYVAWBINXUEDGHOOILSMIJFRCOPPQCEUNYDUMPP
YIZSDWAHLNOVFUCERKJXQMGTBPPKOIYKANZWPLLVWMQJFGQYLL
FLSO
样例输出
样例 #1:
Failed
样例#2:
Failed
样例#3:
NOIP
提示: 输入输出样例1说明:原信息中的字母‘A’和‘B’对应相同的密字,输出“Failed”。
输入输出样例2说明:字母‘Z’在原信息中没有出现,输出“Failed”。
代码实现
九分:原因:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
char a[101],b[101],c[101];
int s=0;
int main()
{
cin>>a>>b>>c;
int l=strlen(a);
int n=strlen (c);
for(int i=0;i<l;i++)
{
for(int j=0;j<l;j++)
{
if(a[i]!=b[j]) s++;
if(a[i]!=a[j]&&b[i]==b[j])
{
cout<<"Failed";
return 0;
}
}
if(s==l)
{
cout<<"Failed";
return 0;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<l;j++)
if(c[i]==a[j])
{
c[i]=b[j];
break;
}
printf("%c",c[i]);
}
return 0;
}
更正
12:加密的病历单
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)
1. 原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
2. 逆序存储(abcd -> dcba )
3. 大小写反转(abXY -> ABxy)
输入 一个加密的字符串。(长度小于50且只包含大小写字母)
输出 输出解密后的字符串。
样例输入GSOOWFASOq
样例输出Trvdizrrvj
代码实现
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
char a[51],b[51];
int main()
{
gets(a);
int l=strlen(a);
for(int i=0;i<l;i++)
{
if(a[i]>=88&&a[i]<=90||a[i]>=120) a[i]=a[i]-23;
else a[i]=a[i]+3;
}
for(int i=0;i<l;i++)
{
if(a[i]>=65&&a[i]<=90)
a[i]=a[i]+32;
else a[i]=a[i]-32;
}
for(int i=l-1;i>=0;i--)
cout<<a[i];
return 0;
}
13:将字符串中的小写字母转换成大写字母
给定一个字符串,将其中所有的小写字母转换成大写字母。
输入
输入一行,包含一个字符串(长度不超过100,可能包含空格)。
输出
输出转换后的字符串。
样例输入
helloworld123Ha
样例输出
HELLOWORLD123HA
代码实现
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
char a[101];
int main()
{
gets(a);
int l=strlen(a);
for(int i=0;i<l;i++)
{
if(a[i]>=97&&a[i]<=122)
a[i]=a[i]-32;
}
puts(a);
return0;
}
14:大小写字母互换
把一个字符串中所有出现的大写字母都替换成小写字母,同时把小写字母替换成大写字母。
输入
输入一行:待互换的字符串。
输出
输出一行:完成互换的字符串(字符串长度小于80)。
样例输入
If so, you already have a Google Account. You can sign in on the right.
样例输出
iF SO, YOU ALREADY HAVE A gOOGLE aCCOUNT. yOU CAN SIGN IN ON THE RIGHT.
代码实现、
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
char a[100];
int main()
{
gets(a);
int l=strlen(a);
for(int i=0;i<l;i++)
{
if(a[i]>=97&&a[i]<=122)
a[i]=a[i]-32;
else if(a[i]>=65&&a[i]<=90)
a[i]=a[i]+32;
cout<<a[i];
}
return 0;
}
Stl:
可以使用stl来大小写转换
Strlwr(字符串名)将字符串中的大写字符全部转换成小写
Strupr(字符串名)将字符串中的小写字符全部转换成大写
15:整理药名
描述
医生在书写药品名的时候经常不注意大小写,格式比较混乱。现要求你写一个程序将医生书写混乱的药品名整理成统一规范的格式,即药品名的第一个字符如果是字母要大写,其他字母小写。如将ASPIRIN、aspirin整理成Aspirin。
输入
第一行一个数字n,表示有n个药品名要整理,n不超过100。
接下来n行,每行一个单词,长度不超过20,表示医生手书的药品名。药品名由字母、数字和-组成。
输出
n行,每行一个单词,对应输入的药品名的规范写法。
样例输入
4
AspiRin
cisapride
2-PENICILLIN
Cefradine-6
样例输出
Aspirin
Cisapride
2-penicillin
Cefradine-6
代码实现
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
char a[100];
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>a;
int l=strlen(a);
if(a[0]>=97&&a[0]<=122)
a[0]=a[0]-32;
for(int i=1;i<l;i++)
{
if(a[i]>=65&&a[i]<=90)
a[i]=a[i]+32;
}
cout<<a<<endl;
}
return 0;
}
noi题库 1.7 字符串 10到第15题的更多相关文章
- noi 题库1.7字符串 第16至20题
16:忽略大小写的字符串比较 一般我们用strcmp可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止.如果全部字符 ...
- noi题库 1.7 字符串
前九题 01:统计数字字符个数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一行字符,统计出其中数字字符的个数. 输入 一行字符串,总长度不超过255. 输出 输出为1行,输出字 ...
- OCP最新题库052考题解析及答案-第37题
37.USER1 grants SELECT, INSERT, and UPDATE privileges on USER1. EMP to USER2. SYS executes this comm ...
- OCP题库变了,2018年052新题库-29题
29.In one of your databases: * The database default tablespace is EXAMPLE. * Deferred_segment_creati ...
- NOI题库 09:图像旋转翻转变换
NOI题库开始的题,也是略水,当然也是大水,所以彼此彼此 09:图像旋转翻转变换 总时间限制: 1000ms 内存限制: 65536kB 描述 给定m行n列的图像各像素点灰度值,对其依次进行一系列操作 ...
- NOI题库-小学奥赛QwQ
今天Loli教育我们让我们来看看NOI题库的奥赛部分,不过,为何是小学的( ⊙ o ⊙ )啊!感觉智商被各种侮辱. 余数相同问题: 描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为 ...
- NOI题库刷题日志 (贪心篇题解)
这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个平面上,如果有两个点( ...
- NOI题库 1768最大子矩阵 题解
NOI题库 1768最大子矩阵 题解 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...
- Hibernate考试试题(部分题库)含答案
Hibernate考试试题 (题库) 1. 在Hibernate中,下列说法正确的有( ABC ).[选三项] A.Hibernate是一个开放源代码的对象关系映射框架 B.Hibernate对JD ...
随机推荐
- [NOIP2018 TG D2T2]填数游戏
题目大意:$NOIP2018\;TG\;D2T2$ 题解:在skip2004的博客基础上修改的,也是暴搜. 说明一下把vector改成数组并不可以通过此题,记录. 结论:在$m>n+1$时答案为 ...
- C&C++——段错误(Segmentation fault)
C/C++中的段错误(Segmentation fault) Segment fault 之所以能够流行于世,是与Glibc库中基本所有的函数都默认型参指针为非空有着密切关系的.来自:http://o ...
- [学习笔记]可持久化数据结构——数组、并查集、平衡树、Trie树
可持久化:支持查询历史版本和在历史版本上修改 可持久化数组 主席树做即可. [模板]可持久化数组(可持久化线段树/平衡树) 可持久化并查集 可持久化并查集 主席树做即可. 要按秩合并.(路径压缩每次建 ...
- 【NOIP模拟赛】天神下凡 动态开点线段树
这些圆一定是在同一水平面上的,由于他们没有相交,因此我们发现他们每个人与外界关系可以分为,1.存在并圈圈 2.存在圈圈并被割,因此我们把所有的圆都加1,把被割的在加1,就可以啦,因此我们开一个线段树, ...
- 创建dll
在制作dll的时候,如果全局变量不导出,而函数调用中,包含了全局变量,那么会出现全局变量没有值的问题. add.c #pragma once //强制无签名utf-8 #include "a ...
- Cannot resolve symbol ‘Component’ & Cannot resolve symbol ‘PropTypes’
import React, { Component, PropTypes } from 'react' 报错:Cannot resolve symbol 'Component' Cannot reso ...
- Supermarket [堆]
Supermarket 题目描述 有一个商店有许多批货,每一批货又有N(0<=N<=\(10^4\))个商品,同时每一样商品都有收益Pi ,和过期时间Di (1<=Pi,Di&l ...
- async的用法
package com.example.administrator.myapplication; import android.os.AsyncTask; import android.util.Lo ...
- ERROR: Found lingering reference file hdfs
Found lingering reference异常 ERROR: Found lingering reference file hdfs://jiujiang1:9000/hbase/month_ ...
- 有关getClassLoader().getResourceAsStream(fileName)、class.getResourceAsStream(fileName)和().getContextClassLoader().getResourceAsStream(fileName)的区别
一:前言 在自己获取属性时,碰见了XX.class.getResourceAsStream(fileName),自己对这个其实不是很理解,上网查了下资料,又看到了上述的几个,所以就研究了下. 二:内容 ...