编程题a ~ y的25个字母,从1位到4位的编码,输出这个编码对应的Index

2024-02-13 03:48

本文主要是介绍编程题a ~ y的25个字母,从1位到4位的编码,输出这个编码对应的Index,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

假定一种编码的编码范围是a-y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下:
a,aa,aaa,aaaa,aaab,aaac,…,…,b,ba,baa,baaa,baab,baac,… …,yyyw,yyyx,yyyy
其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。
编写一个函数,输入是任意一个编码,输出这个编码对应的index,如:
输入:baca
输出:16328
题目分析
如果你之前做过另一个题目,“求字符的所有组合,当输入的字符串中含有相同的字符串时,相同的字符交换位置是不同的排列,但是同一个组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。” 那么这个题目一出来起码不会觉得特别无从下手,其实就算没做过也不会特别无从下手,因为就是穷举利器嘛(即使写成漂亮的递归,仍然不能摆脱穷举的命运)。
这里自然不是为了分析这个递归穷举法(也许之后我会再单独写一篇阐述一下下)。所以技巧还是需要一些的。将题目要求的字符串排列组合起来,如下图示
在这里插入图片描述
根据排列组合的原理,单独来看每一位字符其可能的组合都是,把4位结合起来看,从第1位到第4位,其可能的排列组合分别是 p n 1 p^1_n pn1 p n 1 ∗ p n 1 p^1_n * p^1_n pn1pn1 p n 1 ∗ p n 1 ∗ p n 1 p^1_n*p^1_n * p^1_n pn1pn1pn1 p n 1 ∗ p n 1 ∗ p n 1 ∗ p n 1 p^1_n * p^1_n*p^1_n * p^1_n pn1pn1pn1pn1和对于每个字符串的index需要拆分开一位一位看。

先来看最末位,即字符串有4位,前3为相同,只有最后一位不同,那么index = index‘+(*p-*p’)。举个例子
p’ 是指向字符串aaaa的最后一位a的指针,p是指向字符串aaab的最后一位b的指针,那么aaab的index就等于aaaa的index‘加上字符b与字符a的距离(即’b‘-’a’)

接下来看倒数第二位,即前2位和最后1位相同,只有倒数第2位不同,那么index = index’ +(*p-p’)( p n 1 p^1_n pn1 + 1)。举个例子
p’ 是指向字符串aaaa的第3位a的指针,p是指向字符串aaba的指针,那么按排列规则,aaaa与aaba之间应该有字符串aaab,aaac,aaad…aaay, aab,再加上aaaa自身,这一系列字符串正好是一个完整的。再来看一个例子,aaaa与aaca,它们之间应该有字符串aaab,aaac,aaad…aaay,aab,
aaba,aabb,aabc…aaby, aac,正好是2倍的 + 1。因此我们可以很容易得出结论,ndex = index’ +(*p-p’) ( p n 1 p^1_n pn1 + 1)
再看第2位,即第1位和最后2位相同,只有第2位不同,那么在这里插入图片描述
举个例子
p’ 是指向字符串aaaa的第3位a的指针,p是指向字符串abaa的指针,那么按排列规则,aaaa与abaa之间应该有字符串aaab,aaac,…aaay, aaba…aaby…aaya…aayy,再加上aaaa自身,这一系列字符串正好是一个完整的 p n 1 ∗ p n 1 + p n 1 p^1_n *p^1_n +p^1_n pn1pn1+pn1

最后就是首位了,即第1位不同,后面的3位相同,那么。举个例子
p’ 是指向字符串aaaa的第3位a的指针,p是指向字符串baaa的指针,那么按排列规则,aaaa与baaa之间应该有字符串aaab,aaac,…aaay, aab,aaba…aaby…ab,aba,abaa,…abyy, ay,aya,ayaa…ayyy,b,ba,baa,再加上aaaa自身,这一系列字符串正好是一个完整的 p n 1 ∗ p n 1 ∗ p n 1 + p n 1 ∗ p n 1 + p n 1 p^1_n * p^1_n*p^1_n +p^1_n *p^1_n +p^1_n pn1pn1pn1+pn1pn1+pn1

综上,mnoq相对于字符串a的index应该是

在这里插入图片描述
分析完毕。输入index反向查找字符串正好是将上面的分析过程反过来,这里不详细记述。

//输入字符串输出index
#include<iostream>
using namespace std;
int main()
{int num=25;string p;cin>>p;int n=3;int index=0;int sum[4]={1};for(int i=1;i<4;i++){sum[i]=num*sum[i-1]+1;}for(int i=0;i<p.length();i++){index=index+(p[i]-'a')*sum[n--];}cout<<index;
}

这篇关于编程题a ~ y的25个字母,从1位到4位的编码,输出这个编码对应的Index的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/704405

相关文章

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

VSCode中C/C++编码乱码问题的两种解决方法

《VSCode中C/C++编码乱码问题的两种解决方法》在中国地区,Windows系统中的cmd和PowerShell默认编码是GBK,但VSCode默认使用UTF-8编码,这种编码不一致会导致在VSC... 目录问题方法一:通过 Code Runner 插件调整编码配置步骤方法二:在 PowerShell

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

pytorch+torchvision+python版本对应及环境安装

《pytorch+torchvision+python版本对应及环境安装》本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,... 目录一、版本对应二、安装命令(pip)1. 版本2. 安装全过程3. 命令相关解释参考文章一、版本对

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常