蓝桥杯 第十天 :2022 国赛 第 2 题 排列距离/康托定理

embedded/2025/3/23 23:22:58/

实际上就是求字典序:

假设我们有 3 个数字:1, 2, 3。

  • 排列组合总数: 3! = 3 * 2 * 1 = 6 种。 这 6 种排列分别是:

    1. 1 2 3
    2. 1 3 2
    3. 2 1 3
    4. 2 3 1
    5. 3 1 2
    6. 3 2 1
  • 康托展开:

    • 对于排列 2 1 3,康托展开计算的结果是 2。这意味着 2 1 3 在所有 6 种排列中,按字典序排在第 3 位(因为从 0 开始计数)。
    • 对于排列 3 2 1,康托展开计算的结果是 5。这意味着 3 2 1 在所有 6 种排列中,按字典序排在第 6 位。
    • 对于排列 1 2 3, 康托展开计算的结果是0。这意味着 1 2 3 在所有6种排列中,按字典序排在第 1 位。
          private static final String A = "aejcldbhpiogfqnkr";private static final String B = "ncfjboqiealhkrpgd";public static void main(String[] args) {// 计算排列B相对于排列A的位置差long t = tak(B) - tak(A);// 如果t是负数,则取绝对值t = Math.abs(t);//这个就是顺着排的值// 取最小值,即从A到B或者从B到A的最小步数t = Math.min(t, check(17) - t);//看看是顺着排还是逆着排// 输出结果System.out.println(t);}// 计算阶乘private static long check(int n) {//17个数的全排列一共有多少个if (n == 0) return 0;long t = 1;// 计算n的阶乘for (int i = 1; i <= n; i++)t *= i;return t;}// 计算排列a在次序,能排第几个private static long tak(String a) {long ans = 0;// 对于排列a的每一个字符for (int i = 0; i < a.length(); i++) {int t = 0;// 计算在当前位置之后有多少个小于当前字符的字符for (int j = i + 1; j < a.length(); j++) {if (a.charAt(j) < a.charAt(i))t++;}// 根据康托展开公式计算当前位置的贡献ans += check(a.length() - 1 - i) * t;//t乘阶乘}return ans;}


http://www.ppmy.cn/embedded/174640.html

相关文章

JavaScript-函数、对象详解

一、函数 1.为什么需要函数&#xff1f; 作用&#xff1a;封装重复代码&#xff0c;实现复用示例&#xff1a;alert ()、prompt () 等内置函数 2.函数声明与调用 语法&#xff1a; function 函数名() {// 函数体 } 函数名(); // 调用 命名规范&#xff1a; 小驼峰命名&am…

windows+ragflow+deepseek实战之一excel表查询

ragflows平台部署参考文章 Win10系统Docker+DeepSeek+ragflow搭建本地知识库 ragflow通过python实现参考这篇文章 ragflow通过python实现 文章目录 背景效果1、准备数据2、创建知识库3、上传数据并解析4、新建聊天助理5、测试会话背景 前面已经基于Win10系统Docker+DeepSeek+…

Python实验:Python语言分支循环结构应用

[实验目的] 掌握分支结构&#xff0c;利用if语句实现单分支、双分支和多分支&#xff1b;掌握循环结构&#xff0c;运用while语句和for语句实现循环结构和循环嵌套&#xff1b;了解Python扩展库的使用方法&#xff1b;掌握程序的异常处理。 [实验和内容] 1.用户从键盘输入一…

家族族谱管理系统基于Spring Boot

目录 引言 一、系统概述 二、系统架构 三、功能模块 四、技术实现 五、系统特色 六、总结 引言 在数字化浪潮席卷全球的今天&#xff0c;家族文化的传承与延续面临着前所未有的挑战与机遇。传统纸质家谱因保存不便、查询困难、更新滞后等问题&#xff0c;已难以满足现代…

使用 Docker 构建 LangChain 开发环镜及 ChatOllama 示例

文章目录 Github官网简介Dockerfilerequirements.txt构建 LangChain 镜像ChatOllama 示例Ollama 示例模拟 tools Github https://github.com/langchain-ai/langchain 官网 https://python.langchain.com/docs/introduction/ 简介 LangChain 是一个用于构建 LLM 驱动的应用…

Flink实战教程从入门到精通(基础篇)(二)Flink快速上手

目录 前言&#xff1a; 一、环境准备 二、创建项目 1.创建工程 2、添加项目依赖 三、WordCount代码编写&#xff08;有界流&#xff09; 1、批处理和流处理 2、数据准备 3、编写代码 1、DataSet API &#xff08;不推荐&#xff09;&#xff08;批处理&#xff…

第二章 EXI协议原理与实现--7.5 Efficient XML库和OpenEXI.jar编解码交叉测试

7.5 Efficient XML库和OpenEXI.jar编解码交叉测试 本节对Efficient XML库和OpenEXI.jar库进行编解码交叉测试&#xff0c;目的是验证Efficient XML库的兼容性。 7.5.1 测试方案 目标文件&#xff1a; flightdata.xml、flightdata.xsd、flightdata.cxs 由于efficientXML库默…

ManiWAV:通过野外的音频-视频数据学习机器人操作

24年6月来自斯坦福大学、哥伦比亚大学和 TRI 的论文“ManiWAV: Learning Robot Manipulation from In-the-Wild Audio-Visual Data”。 音频信号通过接触为机器人交互和物体属性提供丰富的信息。这些信息可以简化接触丰富的机器人操作技能学习&#xff0c;尤其是当视觉信息本身…