目录
#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”。
代码
#12:加密的病历单
描述
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)
1. 原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
2. 逆序存储(abcd -> dcba )
3. 大小写反转(abXY -> ABxy)
输入
一个加密的字符串。(长度小于50且只包含大小写字母)
输出
输出解密后的字符串。
样例输入
GSOOWFASOq
样例输出
Trvdizrrvj
代码
#include<stdio.h>
#include<string.h>
int main()
{
char secret[51],s1[51];
int i=0,len;
scanf("%s",secret);
len=strlen(secret);
while (i<len)
{
if(secret[i]>='a'&&secret[i]<='z')
{
secret[i]= 'a'+(secret[i]-'a'+3)%26;
s1[i]=secret[i]-('a'-'A');
i++;
}
if(secret[i]>='A'&&secret[i]<='Z')
{
secret[i]= 'A'+(secret[i]-'A'+3)%26;
s1[i]=secret[i]+('a'-'A');
i++;
}
}
for(i=len-1;i>=0;i--)
{
printf("%c",s1[i]);
}
return 0;
}
# 13:将字符串中的小写字母转换成大写字母
描述
给定一个字符串,将其中所有的小写字母转换成大写字母。
输入
输入一行,包含一个字符串(长度不超过100,可能包含空格)。
输出
输出转换后的字符串。
样例输入
helloworld123Ha
样例输出
HELLOWORLD123HA
代码
#include<stdio.h>
#include<string.h>
int main()
{
char secret[100],s1[100];
int i=0,len;
fgets(secret,100,stdin);
len=strlen(secret);
while (i<len)
{
if(secret[i]>='a'&&secret[i]<='z')
{
s1[i]=secret[i]-('a'-'A');
i++;
}
else
{
s1[i]=secret[i];
i++;
}
}
for(i=0;i<len;i++)
{
printf("%c",s1[i]);
}
return 0;
}
# 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<stdio.h>
#include<string.h>
int main()
{
char secret[100],s1[100];
int i=0,len;
fgets(secret,81,stdin);
len=strlen(secret);
while (i<len)
{
if(secret[i]>='a'&&secret[i]<='z')//小换大
{
s1[i]=secret[i]-('a'-'A');
i++;
}
else if(secret[i]>='A'&&secret[i]<='Z')//大变小
{
s1[i]=secret[i]+('a'-'A');
i++;
}
else
{
s1[i]=secret[i];
i++;
}
}
for(i=0;i<len;i++)
{
printf("%c",s1[i]);
}
return 0;
# 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<stdio.h>
#include<string.h>
int main()
{
char s[100][30];
int i=0,j=0,n;
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%s",s[i]);
}
for(i=0;i<n; i++)
{
j=0;//每一次判断完以后都把j归零
while(j<strlen(s[i]))
{
if(s[i][0]>='a'&&s[i][0]<='z')//首字母如果是小写,把它变成大写
{
s[i][0]=s[i][0]-('a'-'A');
j++;
}
else if ((s[i][j]>='A'&&s[i][j]<='Z')&&(j!=0))//除首字母之外,如果有大写,变成小写
{
s[i][j]=s[i][j]+('a'-'A');
j++;
}
else //其他的不变化
{
j++;
}
}
}
for(i=0;i<n; i++)//输出
{
printf("%s\n",s[i]);
}
return 0;
}