算法创作|蓝桥杯——排列序数问题解决方法

问题描述示例:如果用a b c d这4个字母组成一个串,有4!=24种,如果把它们排个序,每个串都对应一个序号:abcd  0abdc  1acbd  2acdb  3adbc  4adcb  5bacd  6badc  7bcad  8bcda  9bdac  10bdca  11cabd  12cadb  13cbad  14cbda  15cdab  16cdba  17...现在有不多于10个两两不同的小写字母,给出它们组成的串,求出该串在所有排列中的序号吗?输入:一行,一个串输出:一行,一个整数,表示该串在其字母所有排列生成的串中的序号。注意:最小的序号是0。解决方案严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:不要使用package语句。注意:主类的名字必须是:Main还是全排,模拟它排序的过程,n最大是10,而10!不会超时,交换的全排不是字典序,标记数组的全排是字典序import java.util.Arrays;import java.util.Scanner;public class 排列序数 {public  static void main(String[] args) {Scanner  in = new Scanner(System.in);a  = in.next();ch1  = a.toCharArray();Arrays.sort(ch1);n  = ch1.length;vis  = new boolean[n];ch2  = new char[n];dfs(0);System.out.println(ans);}static  char[] ch1;static  char[] ch2;static  boolean[] vis;static  int n;static  String a;static  int cnt=0,ans=0;static  void dfs(int m) {if(ans>0)return;if(m>=n)  {//                      System.out.println(new  String(ch2));if(a.equals(new  String(ch2)))ans  = cnt;cnt++;return;}for(int  i=0;i<n;i++)if(!vis[i])  {vis[i]  = true;ch2[m]  = ch1[i];dfs(m+1);vis[i]  = false;}}//     static  void swap(int i,int j) {//             char  c = ch[i];//             ch[i]  = ch[j];//             ch[j]  = c;//     }}结语在查阅了大量资料后,我们小组决定借鉴蓝桥杯比赛——排列序数问题,在查阅资料的基础上加上了一些我们自己对于排列的思考,也借鉴了一些参考答案,最终完成这一问题。在本次作业过程中,我们都意识到了自己python基础的不足,原本是想自己创作一个问题并解决,但由于基础较差,所以只能从网上搜寻了题目和资料来完成。在接下来的时间里,我们小组决定将基础夯实,争取在本学期结束时能够独立创作出题目以及解决方案。主编:欧洋作者:罗梦思、曾希明、陈柯桦

(0)

相关推荐

  • SZTU-ACM 2021 春期训练赛第一点五场 [组队赛](第四届河南大学生程序设计竞赛)总结和题解

    A 序号互换 题目意思很简单,就是关于26进制的互相转换,如果是26进制换10进制,直接把每一位按顺序乘26累计到下一位即可获得最终结果.如果是10进制转26进制,我们首先要把字符串转化为整形.然后每 ...

  • 洛谷 P3825 [NOI2017]游戏

    传送门 同 AcWing 1032 游戏 #include <bits/stdc .h>using namespace std;using ll = long long;using p = ...

  • [图论总结1]最大独立集

    独立集 PICTURE:/home/ldu/.config/tencent-qq//AppData/file//sendpix0.jpg 来自oi-wiki 在上面的描述中,V是代表的点权,而E代表的 ...

  • 图的连通性——Tarjan算法&割边&割点

    tarjan算法 原理: 我们考虑 DFS 搜索树与强连通分量之间的关系. 如果结点 是某个强连通分量在搜索树中遇到的第⼀个结点,那么这个强连通分量的其余结点肯定 是在搜索树中以 为根的⼦树中. 被称 ...

  • Frame Stacking POJ - 1128

    原题链接 考察:拓扑排序 dfs 我觉得这道题最难的是理解题目... 这道题的字母是随机使用,不一定按顺序 思路: 我们先要在相片中找到各字母的边框.这里只能暴力查找.找到后遍历边框如果边框不是该字母 ...

  • 算法创作|蓝桥杯-体力消耗问题解决方法

    问题描述用文字描述要解决的问题是什么.示例:小明要做一个跑步训练.初始时,小明充满体力,体力值计为 10000.如果小明跑步,每分钟损耗600 的体力.如果小明休息,每分钟增加300的体力.体力的损耗 ...

  • 算法创作|蓝桥杯真题分糖果问题解决方法

    问题描述有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:每个小朋友都把自己的糖果分一半给左手边的孩子.一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数.反复 ...

  • 算法创作|蓝桥杯关于成绩统计问题解决方法

    标题问题描述示例:小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数.如果得分至少是 60 分,则称为及格.如果得分至少为 85 分,则称为优秀.请计算 ...

  • 算法创作|“猴子选王游戏”问题解决方法

    前言问题描述一群猴子围成一圈,按1,2,3,-,m依次编号.然后从第1只开始数,数到第n只,把它剔出去,再重新开始数,如此不停的进行下去,最后剩下的那只就是大王.解决方案题目分析:本题的核心思路是一个 ...

  • 算法创作 | 输出逆序数问题解决方法

    问题描述示例:程序每次读入一个正三位数,输出按位逆序的数字.(请注意:当输入的数字含有结尾的0时,输出不应该带有前导的0.)输入:700输出:7或者输入:123输出:321解决方案读入三位正整数,要求 ...

  • 算法创作|栈相关问题的解决方法

    问题描述 在平时是学习中经常会遇到栈,可栈到底是什么,在生活中有什么应用呢? 解决方案 在数据结构中,栈是保存数据元素的容器,可以把数据存入其中也可取出使用,同样支持访问操作包括查看. 既然它作为一个 ...

  • 算法创作|出现最多的字母解决方法

    前言你知道一个单词中哪个字母出现次数最多吗?问题描述小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度.小蓝学了很长时间也记不住一些单词,他准 ...

  • 算法创作|神奇语言问题解决方法

    问题描述一位同学正在学习一门神奇的语言,其中的单词都是由小写英文字母组成,有些单词很长,而这位同学一直记不住,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现的最多来分辨单词,现在请帮助这位同学 ...

  • 算法创作|阶梯电价问题解决方法

    问题描述为了提倡居民节约用电,某省电力公司执行"阶梯电价",安装一户一表的居民用户电价分为两个"阶梯":月用电量50千瓦时(含50千瓦时)以内的,电价为0.53 ...