热门标签 | 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 
      
      

推荐阅读
  • 本文探讨了Java中char数据类型的特点,包括其表示范围以及如何处理超出16位字符限制的情况。通过引入代码点和代码单元的概念,详细解释了Java处理增补字符的方法。 ... [详细]
  • 题意题目大意很简单,很容易找出对应字母的ASCII码值的关系,但是有一点需要注意,请看代码:读字符串必须要用getline ... [详细]
  • 本文介绍了如何计算给定数组中所有非质数元素的总和,并提供了多种编程语言的实现示例。 ... [详细]
  • 详解 | 日志系统ViseLog的基本使用与功能
    本文详细介绍了日志系统ViseLog的使用方法及其核心功能,旨在帮助开发者更好地理解和利用这一工具,提高开发效率。 ... [详细]
  • 本文探讨了在JavaScript中执行字符串形式代码的多种方法,包括使用eval()函数以及跨页面调用的方法。同时,文章详细介绍了JavaScript中字符串的各种常用方法及其应用场景。 ... [详细]
  • addcslashes—以C语言风格使用反斜线转义字符串中的字符addslashes—使用反斜线引用字符串bin2hex—函数把包含数据的二进制字符串转换为十六进制值chop—rt ... [详细]
  • 题目描述了一个病毒检测问题,要求使用AC自动机算法统计目标文本中多个模式串的出现次数。 ... [详细]
  • 本文探讨了C++编程语言中声明与定义的区别,以及如何通过内部连接和外部连接来组织源文件,确保代码的正确链接与编译。文章详细解析了不同类型、变量、函数以及类的连接属性,并提供了实用的示例。 ... [详细]
  • 辗转相减法在求解最大等比值问题中的应用
    本文探讨了如何利用辗转相减法解决X星球大奖赛中奖金分配的数学问题,通过分析给定的数据点,计算出可能的最大等比值。 ... [详细]
  • 本文详细介绍了Manacher算法,该算法能够在O(n)时间内找到字符串中的最长回文子串。通过对字符串进行预处理,并使用动态规划的思想,Manacher算法能够高效地解决这一问题。 ... [详细]
  • http:acm.hdu.edu.cnshowproblem.php?pid1846好几天没出题了,今天终于水了一题巴什博弈题。总结:【一】巴什博弈对象:一堆石子(可延伸 ... [详细]
  • 本文详细探讨了C++中赋值运算符重载函数(operator=)的使用方法和注意事项,结合实例分析了其参数、返回值、调用时机等关键点,并讨论了浅拷贝和深拷贝的区别及其重要性。 ... [详细]
  • 在该问题中,若存在一个节点x满足特定条件,则x所在的强连通分量(SCC)同样满足条件。合法的SCC数量最多为1,因为多个SCC之间具有传递性,理论上应能合并。本文将通过拓扑排序和缩点技术来探讨这一算法的实现。 ... [详细]
  • 本文介绍如何在Ubuntu环境下为OpenWrt系统构建并安装首个'Hello World'应用程序的IPK包。文章不仅涵盖了基本的环境搭建,还详细说明了代码编写、Makefile配置及最终的IPK包生成与安装过程。 ... [详细]
  • 尽管PHP是一种强大且灵活的Web开发语言,但开发者在使用过程中常会陷入一些典型的陷阱。本文旨在列出PHP开发中最为常见的10种错误,并提供相应的预防建议。 ... [详细]
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社区 版权所有