问题描述
  0、1、2三个数字的全排列有六种,按照字母序排列如下:
  012、021、102、120、201、210
  输入一个数n
  求0~9十个数的全排列中的第n个(第1个为0123456789)。
输入格式
  一行,包含一个整数n
输出格式
  一行,包含一组10个数字的全排列
样例输入
1
样例输出
0123456789
数据规模和约定
  0 < n <= 10!

本题主要考查全排列中字典序的实现。关于如何实现字典序,这个是有专门的实现算法,具体实现原理,大家可以百度一下哟~

import java.util.Scanner;public class Main {public int count = 1;  //用于计算当前已排列个数public void swap(int[] A, int a, int b) {int temp = A[a];A[a] = A[b];A[b] = temp;}//反转数组A中start~end区间的元素public void reverseArray(int[] A, int start, int end) {while(start < end) {int temp = A[start];A[start++] = A[end]; A[end--] = temp; }}//判定数组A中是否有两个连续递增的元素public boolean judgeArray(int[] A) {for(int i = 1;i < A.length;i++) {if(A[i - 1] < A[i])return true;}return false;}//从数组A最后一位开始遍历,找出第一个出现A[i] < A[i + 1]的数组下标ipublic int getFirstI(int[] A) {int first = A.length - 1;for(int i = first;i >= 1;i--) {if(A[i - 1] < A[i]) {first = i - 1;break;}}return first;}//扩展getFirstI功能,找出元素A[i]后面大于A[i]的最小元素下标public int getFirstJ(int[] A) {int j = getFirstI(A);int valueI = A[j];j++;for(;j < A.length;j++) {if(A[j] <= valueI) {j = j - 1;break;}}if(j == A.length)j = j - 1;return j;}public void printResult(int[] A, int x) {if(x == 1) {for(int m = 0;m < A.length;m++)System.out.print(A[m]);return;}int i, j;while(judgeArray(A)) {  //字典序排序具体实现部分i = getFirstI(A);j = getFirstJ(A);swap(A, i, j);reverseArray(A, i + 1, A.length - 1);count++;if(count == x)break;}for(int m = 0;m < A.length;m++)System.out.print(A[m]);return;}public static void main(String[] args) {Main test = new Main();int[] A = {0,1,2,3,4,5,6,7,8,9};Scanner in = new Scanner(System.in);int x = in.nextInt();test.printResult(A, x);}
}

java 实现 蓝桥杯 算法提高 排列数相关推荐

  1. 蓝桥杯 算法提高 排列数

    问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下: 012.021.102.120.201.210 输入一个数n 求0~9十个数的全排列中的第n个(第1个为0123456789). 输入 ...

  2. Java实现 蓝桥杯 算法提高 小X的购物计划

    试题 算法提高 小X的购物计划 问题描述 小X打算去超市shopping.小X没什么钱,只有N元.超市里有M种物品,每种物品都需要money,在小X心中有一个重要度.有的物品有无限件,有的物品只有几件 ...

  3. Java实现 蓝桥杯 算法提高 Monday-Saturday质因子

    试题 算法提高 Monday-Saturday质因子 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 这个问题是个简单的与数论有关的题目,看起来似乎是"求正整数的所有质因子 ...

  4. Java实现 蓝桥杯 算法训练 相邻数对(暴力)

    试题 算法训练 相邻数对 问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 ...

  5. Java实现 蓝桥杯 算法提高 成绩排名

    试题 算法提高 成绩排名 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小明刚经过了一次数学考试,老师由于忙碌忘记排名了,于是老师把这个光荣的任务交给了小明,小明则找到了聪明的你, ...

  6. Java实现 蓝桥杯 算法提高 快乐司机

    算法提高 快乐司机 时间限制:1.0s 内存限制:256.0MB 问题描述 "嘟嘟嘟嘟嘟嘟 喇叭响 我是汽车小司机 我是小司机 我为祖国运输忙 运输忙" 这是儿歌"快乐的 ...

  7. Java实现 蓝桥杯 算法提高 秘密行动

    试题 算法提高 秘密行动 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小D接到一项任务,要求他爬到一座n层大厦的顶端与神秘人物会面.这座大厦有一个神奇的特点,每层的高度都不一样, ...

  8. Java实现 蓝桥杯 算法提高 奥运会开幕式

    试题 算法提高 奥运会开幕式 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 学校给高一(三)班分配了一个名额,去参加奥运会的开幕式.每个人都争着要去,可是名额只有一个,怎么办?班长 ...

  9. Java实现 蓝桥杯 算法提高 高精度减法(JDK方法)

    试题 算法提高 高精度减法 问题描述 高精度减法 输入格式 两行,表示两个非负整数a.b,且有a > b. 输出格式 一行,表示a与b的差 样例输入 1234567890987654321 99 ...

最新文章

  1. CoolPad backdoor CoolReaper
  2. SpringSide 3 中的 Struts 2
  3. java mock什么意思_java @Mock, @MockBean 与 Mockito.mock( ) 之间的差异
  4. WebOS + WebIM
  5. 掌握shell编程中数组的常见用法及示例
  6. ArrayList单列集合的简单使用常见方法
  7. java 位运算 权限控制_java 位运算权限管控(转载)
  8. CCF201503-3 节日(100分)
  9. 2011 ACM 0和1思想
  10. [Java] 蓝桥杯BASIC-21 基础练习 Sine之舞
  11. 数字摄像机常见术语和参数介绍
  12. maven集成tomcat插件启动报错
  13. ​突破数据存储瓶颈,Aibee实现场景化AI的有效落地
  14. 下载论文的tex模板
  15. Java学生管理系统-增删改查
  16. 批量获取中国所有行政区域经边界纬度坐标(到县区级别)
  17. 设备点检php源码,设备巡检管理系统Delphi源码下载
  18. Xshell上传文件到linux服务器
  19. DirectX修复工具的详细使用步骤介绍
  20. 【实践】关于智能蛇的三次尝试

热门文章

  1. ArcGIS VS QGIS——两者之间的27点比较(译)
  2. NFT Insider #88:拥抱 AI,TheSandbox 为创作者赋能,Smurfs发布了路线图的最新更新
  3. 【解决Chrome浏览器和IE浏览器上传附件兼容的问题 -- Chrome关闭flash后,uploadify插件不可用的解决办法】
  4. What is metastability?
  5. Java使用aspose把PDF文件转换成PNG文件,以及把PDF文件水印转换成PNG格式
  6. turtlebot深度相机_ROS入门配置及turtlebot碰到的坑
  7. python 提示 keyError 的4种解决方法
  8. 2019新悦动打火困难解决了吗_现代悦动通病是什么,国六悦动启动困难解决了吗...
  9. 离散数学 --- 图论基础 --- 图的同构,通路与回路,可达性与最短通路
  10. OpenJDK 源代码阅读之 TreeMap