-->
当前位置:首页 > 题库 > 正文内容

函数题:环形加密(填空)

Luz4年前 (2022-01-09)题库1170
将26个英文字母按顺时针方向排成一个圆环。密钥是一个整数。

![](~/374)

具体加密方法如下:

- 若密钥 $$key \geq 0$$,则从明文字母开始按顺时针方向走 $$| key |$$ 步得到密文字母;
- 若密钥 $$key \lt 0$$,则从明文字母开始按逆时针方向走 $$| key |$$ 步得到密文字母。

下面的程序输入明文和密钥,输出密文。请在空白处填写适当内容完成该程序。

c
#include <stdio.h>
#include <stdio.h>

int main()
{
char plain, secret;
int key;
scanf(" %c %d", &plain, &key);

____________

printf("%c\n", secret);
return 0;
}


#### 输入格式
> 明文(小写字母) 密钥(任意整数)

#### 输出格式
> 密文(小写字母)

#### 输入样例1
in
x 5


#### 输出样例1
out
c


#### 输入样例2
in
b -3


#### 输出样例2
out
y








答案:若无答案欢迎评论

# 无须使用 if 语句,用好取模运算 % 即可解题。

#### 详细说明

1. 将明文字母减去首字母,变成字母的序号 (0 ~ 25)

c
plain - 'a'


2. 密钥为 key,绝对值可能很大,为避免溢出,应先取模 (-25 ~ 25)

c
key % 26


3. 结果可能为负数,再加26,可确保为正数 (0 ~ 25)

c
(key % 26 + 26) % 26


4. 将字母序号加上密钥,再取模,得到密文字母的序号 (0 ~ 25)

c
(plain - 'a' + (key % 26 + 26) % 26) % 26


化简,得

c
(plain - 'a' + key % 26 + 26) % 26


5. 将字母序号加首字母,再变成对应的字母

c
(plain - 'a' + key % 26 + 26) % 26 + 'a'


参考答案

c
secret = (plain - 'a' + key % 26 + 26) % 26 + 'a';

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。