【蓝桥杯】 凯撒加密:给定一个单词,请使用凯撒密码将这个单词加密。 凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移 3 位后被替换成密文。即 a 变为 d,b 变为 e,…

题目描述

题目传送门 >> 凯撒加密

【问题描述】
给定一个单词,请使用凯撒密码将这个单词加密。

凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移 3 位后被替换成密文。即 a 变为 d,b 变为 e,…,w 变为z,x 变为 a,y 变为 b,z 变为 c。

【输入描述】
输入一行,包含一个单词,单词中只包含小写英文字母,单词中的字母个数不超过 100。

【输出描述】
输出一行,表示加密后的密文。

【输入输出样例】
输入:

 lanqiao

输出:

 odqtldr

【运行限制】
• 最大运行时间:1s
• 最大运行内存: 256M


解题思路

printf("%c",num),会输出ASCII码为num的对应字符。

【法一】每个字母有对应的ASCII码,查表可得,a对应的ASCII码是97,z对应的是122。当字母<x时,可以直接+3;但"x",“y”,“z"这三个字母,加密后对应"a”,“b”,“c”,故-23即可。
【法二】
s[i]-97形成下图以0开头的循环队列(a对应0,b对应1,如此类推),向后偏移 3 位进行加密+3,为了避免超出范围需要%26(循环队列中有26个元素),再重新+97形成加密后字母的ASCII码。
如:“y”对应的ASCII为121,在以0开头的循环队列中对应24,(24+3)%26为加密后字符的ASCII码。
请添加图片描述

ASCII码表:百度百科——ASCII码


解题代码

C语言

法一

#include <stdio.h>
#include <string.h>
int main()
{
  int i;
  char s[101];
  gets(s);
  int len = strlen(s);
  for(i = 0;i<len;i++){
    if(s[i] >= 'x'){
      s[i] = s[i] - 23;
    }
    else {
    s[i] = s[i] +3;
    }
    printf("%c",s[i]);
  }
  return 0;
}

法二

#include <stdio.h>
#include <string.h>
int main()
{
  int i;
  char s[101];
  gets(s);
  int len = strlen(s);
  for(i=0;i<len;i++){
	  printf("%c",(s[i]-97+3)%26+97);
  }
  return 0;
}

测试用例

测试1
输入:

 huashang

输出:

 kxdvkdqj

测试2
输入:

 shukeyuan

输出:

 vkxnhbxdq
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值