编程题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

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、