问题描述

  0、1、2三个数字的全排列有六种,按照字母序排列如下:

  012、021、102、120、201、210

  输入一个数n

  求0~9十个数的全排列中的第n个(第1个为0123456789)。

输入格式

  一行,包含一个整数n

输出格式

  一行,包含一组10个数字的全排列

样例输入

1

样例输出

0123456789

数据规模和约定

  0 < n <= 10!

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

  1. import java.util.Scanner;
  2. public class Main {
  3. public int count = 1; //用于计算当前已排列个数
  4. public void swap(int[] A, int a, int b) {
  5. int temp = A[a];
  6. A[a] = A[b];
  7. A[b] = temp;
  8. }
  9. //反转数组A中start~end区间的元素
  10. public void reverseArray(int[] A, int start, int end) {
  11. while(start < end) {
  12. int temp = A[start];
  13. A[start++] = A[end];
  14. A[end--] = temp;
  15. }
  16. }
  17. //判定数组A中是否有两个连续递增的元素
  18. public boolean judgeArray(int[] A) {
  19. for(int i = 1;i < A.length;i++) {
  20. if(A[i - 1] < A[i])
  21. return true;
  22. }
  23. return false;
  24. }
  25. //从数组A最后一位开始遍历,找出第一个出现A[i] < A[i + 1]的数组下标i
  26. public int getFirstI(int[] A) {
  27. int first = A.length - 1;
  28. for(int i = first;i >= 1;i--) {
  29. if(A[i - 1] < A[i]) {
  30. first = i - 1;
  31. break;
  32. }
  33. }
  34. return first;
  35. }
  36. //扩展getFirstI功能,找出元素A[i]后面大于A[i]的最小元素下标
  37. public int getFirstJ(int[] A) {
  38. int j = getFirstI(A);
  39. int valueI = A[j];
  40. j++;
  41. for(;j < A.length;j++) {
  42. if(A[j] <= valueI) {
  43. j = j - 1;
  44. break;
  45. }
  46. }
  47. if(j == A.length)
  48. j = j - 1;
  49. return j;
  50. }
  51. public void printResult(int[] A, int x) {
  52. if(x == 1) {
  53. for(int m = 0;m < A.length;m++)
  54. System.out.print(A[m]);
  55. return;
  56. }
  57. int i, j;
  58. while(judgeArray(A)) { //字典序排序具体实现部分
  59. i = getFirstI(A);
  60. j = getFirstJ(A);
  61. swap(A, i, j);
  62. reverseArray(A, i + 1, A.length - 1);
  63. count++;
  64. if(count == x)
  65. break;
  66. }
  67. for(int m = 0;m < A.length;m++)
  68. System.out.print(A[m]);
  69. return;
  70. }
  71. public static void main(String[] args) {
  72. Main test = new Main();
  73. int[] A = {0,1,2,3,4,5,6,7,8,9};
  74. Scanner in = new Scanner(System.in);
  75. int x = in.nextInt();
  76. test.printResult(A, x);
  77. }
  78. }

java 实现 蓝桥杯 算法提高 排列数的更多相关文章

  1. 蓝桥杯--算法提高 排列数 (简单dfs)

    算法提高 排列数   时间限制:1.0s   内存限制:256.0MB      问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下: 012.021.102.120.201.210 输入 ...

  2. Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)

    试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...

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

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

  4. Java实现 蓝桥杯 算法提高 欧拉函数(数学)

    试题 算法提高 欧拉函数 问题描述 老师出了一道难题,小酱不会做,请你编个程序帮帮他,奖金一瓶酱油: 从1-n中有多少个数与n互质? |||||╭══╮ ┌═════┐ ╭╯让路║═║酱油专用车║ ╰ ...

  5. Java实现 蓝桥杯 算法提高 分解质因数(暴力)

    试题 算法提高 分解质因数 问题描述 给定一个正整数n,尝试对其分解质因数 输入格式 仅一行,一个正整数,表示待分解的质因数 输出格式 仅一行,从小到大依次输出其质因数,相邻的数用空格隔开 样例输入 ...

  6. Java实现 蓝桥杯 算法提高 GPA(暴力)

    试题 算法提高 GPA 问题描述 输入A,B两人的学分获取情况,输出两人GPA之差. 输入格式 输入的第一行包含一个整数n表示A的课程数,以下n行每行Si,Ci分别表示第i个课程的学分与A的表现. G ...

  7. Java实现 蓝桥杯 算法提高 字符串匹配

    试题 算法提高 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符:当选项关闭时 ...

  8. Java实现 蓝桥杯算法提高 求最大值

    算法提高 求最大值 时间限制:1.0s 内存限制:256.0MB 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大.并且要求你选定的数对的ai之和非负 ...

  9. Java实现蓝桥杯算法提高P0102

    算法提高 P0102 时间限制:1.0s 内存限制:256.0MB 提交此题 用户输入三个字符,每个字符取值范围是0-9,A-F.然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进 ...

随机推荐

  1. 关于tez-ui的"All DAGs"和"Hive Queries"页面信息为空的问题解决过程

    近段时间发现公司的HDP大数据平台的tez-ui页面不能用了,页面显示为空,导致通过hive提交的sql不能方便地查找到Yarn上对应的applicationId,只能通过beeline的屏幕输出信息 ...

  2. 前端面试题-http和https区别

    说一下http和https https的SSL加密是在传输层实现的. (1)http和https的基本概念 http: 超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求 ...

  3. 很好的awk教程

    讲的内容配合分析web log ,疗效很好! http://www.ibm.com/developerworks/cn/linux/l-cn-awk-httplog/ 出差归来,哈哈,吐槽的不必写了, ...

  4. Django认证系统之自定义认证表

    models.py from django.db import models from django.contrib.auth.models import AbstractUser class Use ...

  5. 破坏之王DDoS攻击与防范深度剖析【学习笔记】

    一.DDoS初步印象 1.什么是分布式拒绝服务攻击? 1)首先它是一种拒绝服务攻击 我们可以这么认为,凡是导致合法用户不能访问服务的行为,就是拒绝服务攻击. 注:早期的拒绝服务主要基于系统和应用程序的 ...

  6. poj2455 k条路最小化最长边

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12414   Accepted ...

  7. 19-6 通过t-sql实现约束

    ------------------------------------------------------------------------ --通过t-sql语句来创建约束 ---------- ...

  8. Java——变量自增(++)自减(--)

    //运算符在操作数之后,称为“后增量”.i变量自增,返回自增之前的值;//运算符在操作数之前,称为“前增量”.i变量自增,返回自增之后的值.//自减同理 public static void test ...

  9. 【解决办法】IIS环境中,打开网站后就直接列出了所有文件

    有时候访问一个不应当被访问的网站目录时网站会列出该目录下的所有文件,这很不安全,尤其是我们希望我们自己的网站不出现这种情况,如下图所示. 解决办法,在网站根目录新建web.config文件,内容如下: ...

  10. java中String转换成json,json转换成String

    前置添加pom <!-- 配置gson --> <dependency> <groupId>com.google.code.gson</groupId> ...