热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

3421:螺旋加密算法

本题涉及一种由Chip和Dale设计的文本加密方法。该方法通过预先约定的矩阵行数和列数,将字符转换为特定的二进制形式,并以螺旋方式填充矩阵。最终将矩阵中的二进制数连接成一个字符串,实现加密。

3421: 螺旋加密算法

  • 查看
  • 提交
  • 统计
  • 提示
  • 提问
总时间限制:
1000ms
内存限制:
65536kB
描述

Chip和Dale设计了一种新的文本加密方法。在加密前,他们需要预先约定一个矩阵的行数和列数。然后,将字符按照以下步骤进行编码:

  1. 所有文本仅包含大写字母和空格。
  2. 每个字符对应一个数值:空格=0,A=1,B=2,……,Y=25,Z=26。
  3. 将每个字符对应的数值转换为5位二进制数,并依次填入矩阵。如果矩阵未填满,则用0补齐。

例如,对于信息“ACM”,当矩阵的行数和列数均为4时,矩阵将被填充为:

将矩阵中的数字按行连接起来形成一个二进制字符串,完成加密。在这个例子中,信息“ACM”最终被加密为:0000110100101100。

输入

一行输入包含两个整数R (1 ≤ R ≤ 20) 和 C (1 ≤ C ≤ 20),表示矩阵的行数和列数。接下来是一个只包含大写字母和空格的字符串,字符串的长度不超过(R * C) / 5。R和C之间以及C和字符串之间均用单个空格隔开。

输出

一行输出,为加密后的二进制字符串。注意,如果矩阵未填满,需要用0补齐。

样例输入
4 4 ACM
样例输出
0000110100101100
来源

Greater NY 2007

  • 查看
  • 提交
  • 统计
  • 提示
  • 提问
    • 代码:
      #include 
      #include 
      
      int R, C, cnt = 1;
      char code[27][6] = {
          "00000", "00001", "00010", "00011", "00100",
          "00101", "00110", "00111", "01000", "01001",
          "01010", "01011", "01100", "01101", "01110",
          "01111", "10000", "10001", "10010", "10011",
          "10100", "10101", "10110", "10111", "11000",
          "11001", "11010"
      };
      char str[100], ctr[410], a[25][25];
      
      int main() {
          scanf("%d%d ", &R, &C);
          gets(str);
          for (int i = 0; str[i] != '\0'; i++) {
              if (str[i] == ' ') {
                  strcat(ctr, code[0]);
              } else {
                  strcat(ctr, code[str[i] - 'A' + 1]);
              }
          }
          int len = strlen(ctr), x = 0, y = 0;
          memset(ctr + len, '0', sizeof(ctr) - sizeof(char) * len);
          memset(a, '#', sizeof(a));
          a[0][0] = ctr[0];
          while (cnt = 0 && a[x][y - 1] == '#') a[x][--y] = ctr[cnt++];
              while (x - 1 >= 0 && a[x - 1][y] == '#') a[--x][y] = ctr[cnt++];
          }
          for (int i = 0; i 
      
      

推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 【线段树】  本质是二叉树,每个节点表示一个区间[L,R],设m(R-L+1)2(该处结果向下取整)左孩子区间为[L,m],右孩子区间为[m ... [详细]
  • C语言编写线程池的简单实现方法
    2019独角兽企业重金招聘Python工程师标准好文章,一起分享——有时我们会需要大量线程来处理一些相互独立的任务,为了避免频繁的申请释放线程所带 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • 普通树(每个节点可以有任意数量的子节点)级序遍历 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • iOS 不定参数 详解 ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • 深入解析Java中的空指针异常及其预防策略
    空指针异常(NullPointerException,简称NPE)是Java编程中最常见的异常之一。尽管其成因显而易见,但开发人员往往容易忽视或未能及时采取措施。本文将详细介绍如何有效避免空指针异常,帮助开发者提升代码质量。 ... [详细]
  • 本文探讨了 TypeScript 中泛型的重要性和应用场景,通过多个实例详细解析了泛型如何提升代码的复用性和类型安全性。 ... [详细]
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • 第14周实践项目(4)-验证平衡二叉树
    问题**Copyright(c)2015,烟台大学计算机学院*Allrightsreserved.*文件名称:test.cpp*作者:王敏*完成日 ... [详细]
  • 稀疏数组是一种用于存储和处理大部分元素为零或相同值的数组的技术。通过记录非零元素的位置和值,稀疏数组可以显著减少存储空间和提高处理效率。 ... [详细]
  • 题目描述:给定一个区间,支持两种操作:1. 将位置a的值修改为b;2. 查询区间[a, b]内的子序列的最大和,其中子序列中相邻的元素必须具有不同的奇偶性。 ... [详细]
  • Docker 环境下 MySQL 双主同步配置指南
    本文介绍了如何在 Docker 环境中配置 MySQL 的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。 ... [详细]
author-avatar
简单d-e独白
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有