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

推荐阅读
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
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社区 版权所有