中南大学复试上机破译密码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuehailin/article/details/86710359

1007: 破译密码

题目描述

据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第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 
(注意: 只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。)

输入

最多不超过 100 个数据集组成,每个数据集之间不会有空行,每个数据集由 3 部分组成: 

起始行: START 

密码消息:由 1 到 200 个字符组成一行,表示凯撒发出的一条消息. 

结束行: END 
在最后一个数据集之后,是另一行:ENDOFINPUT。

输出

每个数据集对应一行,是凯撒的原始消息。

扫描二维码关注公众号,回复: 5310787 查看本文章

样例输入

<span style="color:#333333"><span style="color:#333333">START
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
END
START
N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ
END
START
IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ
END
ENDOFINPUT</span></span>

样例输出

<span style="color:#333333"><span style="color:#333333">IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME
DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE</span></span>

这道题目主要考察对于字符串的处理吧,还有就是注意c的一些常用函数。然后就是学会使用getchar()函数,也就是对于start和end的处理。

代码:

#include<stdio.h>
#include<string.h>
int main(){
	char a[201];
	char temp[15];
	scanf("%s",temp);
	getchar();
	while(strcmp(temp,"ENDOFINPUT"))
	{  
	gets(a);
	getchar();
	int len = strlen(a);
	int i;
	for(i=0;i<len;i++){
		if((a[i]>64)&&(a[i]<=69))
		a[i]=(char)(a[i]+21);
		else if((a[i]>69)&&(a[i]<=90))
		a[i]=(char)(a[i]-5);
		else
		a[i] = a[i];
	}
	scanf("%s",temp);
	printf("%s\n",a);
	scanf("%s",temp);
 	getchar();
	}
}

猜你喜欢

转载自blog.csdn.net/yuehailin/article/details/86710359