HJ36字符串加密

news/2024/9/18 5:57:16/ 标签: 算法

提示:文章

文章目录

  • 前言
  • 一、背景
  • 二、
    • 2.1
    • 2.2
  • 总结

前言

前期疑问:
本文目标:


一、背景

最近

二、

2.1 HJ36字符串加密

解题

#include <stdio.h>
#include <stdbool.h>int GetStrIndex(char c, char* dict, int len)
{int index = 0;for(int i = 0; i < len; i++){if(c == dict[i]){index = i;}break;}return index;
}int main() {int a, b;char strKey[101];char str[101];while (fgets(strKey, 101, stdin) != NULL) { // 注意 while 处理多个 case// 64 位输出请用 printf("%lld") to fgets(str, 101, stdin);int lengthStrKey = strlen(strKey);strKey[lengthStrKey - 1] = '\0';int lengthStr = strlen(str);str[lengthStr - 1] = '\0';char dictionary[26] = {'\n'};int dictionaryIndex = strlen(strKey);for(int i = 0; i < strlen(strKey); i++){dictionary[i] = strKey[i];} for(int i = 0; i < 26 - strlen(strKey); i++){char c = i + 'a';bool flag = false;for(int j = 0; j < strlen(strKey); j++){if(c == strKey[j]){flag = true;break;}}if(!flag){dictionary[dictionaryIndex++] = c;}}for(int i = 0; i < lengthStr; i++){int index = str[i] - 'a';str[i] = dictionary[index];}printf("%s", str);}return 0;
}//gets会将'\0'改成'\n',strlen需要有\0结尾,strlen不算\0这个字符

未通过示例

用例输入

bvsrduec

bmrkgqybpcpmmntmckxak

预期输出

vingemyvlsliijpisgxbg

实际输出

vingem

下述代码解决上述异常问题,并且增加了对key字符串的去重处理

#include <stdio.h>
#include <stdbool.h>int GetStrIndex(char c, char* dict, int len)
{int index = 0;for(int i = 0; i < len; i++){if(c == dict[i]){index = i;}break;}return index;
}char* SimplifyStrKey(char* strKey, int len)
{int key[26] = {0};char retKey[26] = {'\0'};char* ret = (char*)malloc(sizeof(char) * len);memset(ret, '0', sizeof(char) * len);int retKeyIndex = 0;for(int i = 0; i < len; i++){if(key[strKey[i] - 'a'] == 0){ret[retKeyIndex++] = strKey[i];key[strKey[i] - 'a']++;}}return ret;
}int main() {int a, b;char strKey[101];char str[101];while (fgets(strKey, 101, stdin) != NULL) { // 注意 while 处理多个 case// 64 位输出请用 printf("%lld") to fgets(str, 101, stdin);int lengthStrKey = strlen(strKey);strKey[lengthStrKey - 1] = '\0';int lengthStr = strlen(str);str[lengthStr - 1] = '\0';char dictionary[26] = {'\0'};int dictionaryIndex = strlen(strKey);char* modifyKeyStr = SimplifyStrKey(strKey, lengthStrKey);//printf("%s\n",modifyKeyStr);for(int i = 0; i < strlen(modifyKeyStr); i++){dictionary[i] = modifyKeyStr[i];} for(int i = 0; i < 26 && dictionary[25] == '\0'; i++){char c = i + 'a';bool flag = false;for(int j = 0; j < strlen(modifyKeyStr); j++){if(c == modifyKeyStr[j]){flag = true;break;}}if(!flag){dictionary[dictionaryIndex++] = c;}}for(int i = 0; i < lengthStr; i++){int index = str[i] - 'a';str[i] = dictionary[index];}printf("%s", str);free(modifyKeyStr);}return 0;
}

但是现在下面的示例还是没有通过

用例输入

ybkgenngvjrajenzeqhmamrptohmdmxfmxngjg
zu

预期输出

wc

实际输出

分析原因是因为计算keyStr的长度时,应该在keyStr被去重后计算,修改后就通过全部示例

#include <stdio.h>
#include <stdbool.h>int GetStrIndex(char c, char* dict, int len)
{int index = 0;for(int i = 0; i < len; i++){if(c == dict[i]){index = i;}break;}return index;
}char* SimplifyStrKey(char* strKey, int len)
{int key[26] = {0};char retKey[26] = {'\0'};char* ret = (char*)malloc(sizeof(char) * len);memset(ret, '0', sizeof(char) * len);int retKeyIndex = 0;for(int i = 0; i < len; i++){if(key[strKey[i] - 'a'] == 0){ret[retKeyIndex++] = strKey[i];key[strKey[i] - 'a']++;}}return ret;
}int main() {int a, b;char strKey[101];char str[101];while (fgets(strKey, 101, stdin) != NULL) { // 注意 while 处理多个 case// 64 位输出请用 printf("%lld") to fgets(str, 101, stdin);int lengthStrKey = strlen(strKey);strKey[lengthStrKey - 1] = '\0';int lengthStr = strlen(str);str[lengthStr - 1] = '\0';char dictionary[26] = {'\0'};char* modifyKeyStr = SimplifyStrKey(strKey, lengthStrKey);int dictionaryIndex = strlen(modifyKeyStr);//printf("%s\n",modifyKeyStr);for(int i = 0; i < strlen(modifyKeyStr); i++){dictionary[i] = modifyKeyStr[i];} for(int i = 0; i < 26 && dictionary[25] == '\0'; i++){char c = i + 'a';bool flag = false;for(int j = 0; j < strlen(modifyKeyStr); j++){if(c == modifyKeyStr[j]){flag = true;break;}}if(!flag){dictionary[dictionaryIndex++] = c;}}for(int i = 0; i < lengthStr; i++){int index = str[i] - 'a';str[i] = dictionary[index];}printf("%s", str);free(modifyKeyStr);}return 0;
}//gets会将'\0'改成'\n',strlen需要有\0结尾,strlen不算\0这个字符

三、

3.1


总结

未完待续


http://www.ppmy.cn/news/1525668.html

相关文章

Python中给定一个数组a = [2,3,9,1,0],找出其中最大的一个数,并打印出来 求解?

Python有内置的max函数可以取最大值&#xff1a; max([2,3,9,1,0])也可以使用sorted先排序&#xff0c;再索引取出最大值&#xff1a; sorted([2,3,9,1,0])[-1]如果不用内置函数&#xff0c;自己排序算法来找出最大值&#xff0c;也有很多选择。 比如冒泡排序、循环排序、交…

算法设计(二)

1.归并排序 介绍 归并排序是建立在归并操作上的一种有效&#xff0c;稳定的排序算法&#xff0c;该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有序&#xff0c;再使子序列段间有序。若将两个有…

【人工智能学习笔记】4_4 深度学习基础之生成对抗网络

生成对抗网络&#xff08;Generative Adversarial Network, GAN&#xff09; 一种深度学习模型&#xff0c;通过判别模型&#xff08;Discriminative Model&#xff09;和生成模型&#xff08;Generative Model&#xff09;的相互博弈学习&#xff0c;生成接近真实数据的数据分…

leecode100题-双指针-三数之和

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 答案中不可以包含重复的三元组。 示例 1&#xff1a; 输入…

【Hot100】LeetCode—169. 多数元素

目录 1- 思路题目识别技巧 2- 实现⭐136. 只出现一次的数字——题解思路 3- ACM 实现 原题链接&#xff1a;169. 多数元素 1- 思路 题目识别 识别1 &#xff1a;统计数组中出现数量多余 [n/2] 的元素 技巧 值相同&#xff0c;则对 count 1&#xff0c;如果不相同则对值进行…

线性代数 第六讲 特征值和特征向量_相似对角化_实对称矩阵_重点题型总结详细解析

文章目录 1.特征值和特征向量1.1 特征值和特征向量的定义1.2 特征值和特征向量的求法1.3 特征值特征向量的主要结论 2.相似2.1 相似的定义2.2 相似的性质2.3 相似的结论 3.相似对角化4.实对称矩阵4.1 实对称矩阵的基本性质4.2 施密特正交化 5.重难点题型总结5.1 判断矩阵能否相…

D - 1D Country(AtCoder Beginner Contest 371)

题目链接: D - 1D Country (atcoder.jp) 题目描述: 数据范围: 输入输出: 题目分析: 典型的l, r 区间问题&#xff0c;即是前缀和问题&#xff0c;但是注意到数据范围, 数据范围1e-9 到 1e9 数据范围&#xff0c;要是从最小到最大直接for循环去模拟的话&#xff0c;时间复杂度…

使用iperf3测试局域网服务器之间带宽

文章目录 一、下载安装1、windows2、centos 二、使用0、参数详解1、centos 一、下载安装 1、windows https://iperf.fr/iperf-download.php 拉到最下面选最新版&#xff1a; 2、centos yum install iperf3二、使用 0、参数详解 服务器或客户端&#xff1a; -p, --port #…

Python+Pytest框架,“api_key.py文件怎么编写“?

1、在"api_keyword"文件夹下新增"api_key.py" import allure import requests import json import jsonpath from deepdiff import DeepDifffrom config import *allure.title("测试用例执行") class ApiKey:allure.step(">>>:开…

HTTP 协议和 APACHE 服务

WEB 服务基础 Internet 因特网 因特网是 Internet 的中文译名 在 20 世纪 60 年代&#xff08;冷战时期&#xff09;&#xff0c;美国国防部高等研究计划署&#xff08;ARPA&#xff09;出于军事上的目的&#xff0c;建立了 ARPA 网络&#xff0c;该网络由四个分布在不同地方…

大数据新视界 --大数据大厂之Kafka消息队列实战:实现高吞吐量数据传输

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

商务办公tips1:如何将网页转换为pdf

​ 场景需求&#xff1a; 商务轻办公人士获取网页内容&#xff0c;并且最好是pdf版本&#xff1f; 将网页转换为PDF的需求可能出现在多种场景中&#xff0c;以下是一些可能的情况&#xff1a; 学术研究&#xff1a;研究人员可能需要将某个学术网站的全文内容保存为PDF格式&a…

设计模式 20 状态模式

设计模式 20 创建型模式&#xff08;5&#xff09;&#xff1a;工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式&#xff08;7&#xff09;&#xff1a;适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式行为型模式&#xff…

使用 RabbitMQ 实现秒杀订单系统的异步消息处理

使用 RabbitMQ 实现秒杀订单系统的异步消息处理 在秒杀系统中&#xff0c;如何确保高并发环境下的订单处理稳定高效是个很大的挑战。为了解决这个问题&#xff0c;我们通常会引入消息队列&#xff0c;通过异步处理来削峰填谷。这篇文章将详细讲解如何使用 RabbitMQ 来设计一个…

Linux通过特定端口查看服务是否启动

Linux通过特定端口查看服务是否启动 你可以使用netstat或ss命令来检查特定端口上的服务。例如&#xff0c;使用ss -tuln | grep <端口号>来查看端口是否被占用。 netstat 你可以使用以下命令来查看特定端口上的服务&#xff1a; netstat -tuln | grep <端口号>…

VPP -LB 命令配置

【组网拓扑】 ping --> 2 1.1.1.3 【1.1.1.1 lb 2.2.2.2】 - 1.1.1.2 - 1.1.1.4 【GRE方式配置】 set interface state GigabitEthernet0/8/0 up set interface ip address GigabitEthernet0/8/0 1.1.1.1/24 lb conf ip4-src-addr…

看Threejs好玩示例,学习创新与技术(二)

本文接上篇内容&#xff0c;继续挖掘应用ThreeJS的一些创新算法。 本文理解难度比较大&#xff0c;可以先看一些概念&#xff0c;在难的地方培养一些意识即可。 1、扭曲的自然 下面图本身是矩形的&#xff0c;为何它可以这么扭曲呢&#xff1f;它在随机处带有一定的规律&…

Android - NDK:在Jni中打印Log信息

在Jni中打印Log信息 1、在配置CMakeLists.txt find_library( # Sets the name of the path variable.log-lib# Specifies the name of the NDK library that# you want CMake to locate.log)# Specifies libraries CMake should link to your target library. You # can link…

laravel 资源show方法问题

有张admin_users表&#xff0c;但是在控制器的show方法返回的数据时空。 路由 Route::resource(adminuser, \App\Http\Controllers\AdminUserController::class)->except([create, edit]); 解决&#xff1a; 把路由adminuser 改成 admin-user Route::resource(admin-user, …

深度学习:怎么看pth文件的参数

.pth 文件是 PyTorch 模型的权重文件&#xff0c;它通常包含了训练好的模型的参数。要查看或使用这个文件&#xff0c;你可以按照以下步骤操作&#xff1a; 1. 确保你有模型的定义 你需要有创建这个 .pth 文件时所用的模型的代码。这意味着你需要有模型的类定义和架构。 2. …