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;
}