【做练习】螺旋加密(字符串)

这篇博客介绍了一种由Chip和Dale发明的文本信息加密技术,它基于螺旋矩阵填充字符的5位二进制数值。首先,定义矩阵的行数和列数,然后将大写字母和空格转化为数值并填入矩阵,最后按照行连接矩阵中的数字形成加密二进制串。文章提供了样例输入和输出,并解释了解题思路,包括螺旋式迭代器的实现细节。
摘要由CSDN通过智能技术生成

题目

总时间限制: 1000ms 内存限制: 65536kB

描述

Chip和Dale发明了一种文本信息加密技术。他们事先秘密约定好矩阵的行数和列数。接着,将字符按如下方式编码:

  1. 所有文本只包含大写字母和空格。
  2. 每个字符均赋予一个数值:空格=0,A=1,B=2,……,Y=25,Z=26。
    按照下图所示的方式,将每个字符对应数值的5位二进制数依次填入矩阵。最后用0将矩阵补充完整。例如,对于信息“ACM”,行列数均为4时,矩阵将被填充为:
    在这里插入图片描述
    将矩阵中的数字按行连起来形成数字串,完成加密。例子中的信息最终会被加密为:0000110100101100。

输入

一行。首先是两个整数R(1≤R≤20)和C(1≤C≤20),表示行数和列数。之后是一个只包含大写字母和空格的字符串。字符串的长度≤(R*C)/5。R和C之间以及C和字符串之间均用单个空格隔开。

输出

一行,为加密后的二进制串。注意你可能需要用0将矩阵补充完整。

样例输入

4 4 ACM

样例输出

0000110100101100


解法

一道水题。关键在于如何螺旋式地在矩阵中迭代。

我们定义迭代器含有x, y, dir三个属性,分别表示横坐标、纵坐标和方向。方向用0,1,2,3分别表示右、下、左、上。初始化时,x=y=dir=0。
然后,我们用Next函数来让迭代器移动。我们给矩阵地位置记录一个访问位,Next调用时会先标记访问位。然后,判断迭代器按照当先方向移动的下一个位置后是否是已访问的越界的,如果是,则需要先转到下一个方向才能继续移动。否则就移动到下一个位置。这样一来,迭代器就是螺旋式移动的了。


代码实现

#include <iostream>

#define bit(x, n) ((x >> n) & 1)
#define min(x, y) (x < y ? x : y)


inline int Ch2Int(char ch)
{
   
	return ch == ' ' ? 0 : ch - 'A' + 1;
}

int R, C;
char str[100 + 1];
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值