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

推荐阅读
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
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社区 版权所有