问题描述:
A permutation is an ordered arrangement of objects. For example, 3124 is one possible permutation of the digits 1, 2, 3 and 4. If all of the permutations are listed numerically or alphabetically, we call it lexicographic order. The lexicographic permutations of 0, 1 and 2 are:
012 021 102 120 201 210
What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
解决方法:
以012的组合为例子,所有的交换都基于012最小的数字。
2! 1!
0:0 1 2
1:0 2 1 1= 1!
2:1 0 2 2 = 2!
3:1 2 0 3=2!+1!
4:2 0 1 4=2*2!
5:2 1 0 5 = 2*2! + 1! 先将0和2交换,此时数字为210,然后将1和0交换,此时数字为201,完成了2*2!种变换,然后将1和0交换,完成了1!种变化,则此时的数字210就是我们经过2*2!+1!变换的数字。
An An-1 ....A1
当An确定时,其余n-1位有(n-1)!种排列,那么第n位确定后,就有An*(n-1)!种排列。
而第n-1則有An-1 * (n-2)!
當前n-1位確定,那麼最後一定也就是肯定的!
10000000 = 2*9!+6*8!+6*7!+2*6!+5*5!+1*4!+2*3!+1*2!+1!
开始是0123456789
第一步将2和0交换。得到2103456789,然后交换1和0,得到2013456789。最高位确定为2.
第二步将7和0交换。得到2713456089,然后交换0之前,7之后的数字,得到2701345689。
。。。
其实每次第一次交换后,就是将剩下的数字再次由小到大排序。
为什么呢?
以0123为例子,
第23个是3201,既是 22 = 3×3! + 2×2!
先将3和0交换,得到3120,此时并不是滴3*3!个,得到第3*3!需要将其余的几位排序。
这里大家好好想想。
public static final Long UP = 9876543210L;
public static final int START = 123;
public static final int Last = 1000000;
public static final int HIGH = 9;
public static int[] Number = new int[9];
public static final int[] Element = {0,1,2,3,4,5,6,7,8,9};
public static long Factorial(int number){
long r = 1;
for(int i=number; i>1; i--){
r *= i;
}
return r;
}
public static void ai_find(){
Arrays.fill(Number, 0);
int remain = Last-1;
int high = HIGH;
int posititon = 0;
while(remain!=0){
long value = Factorial(high);
long num = 0;
if(remain>=value){
num = remain/value;
remain -= value*num;
Number[posititon] = (int)num;
}else{
Number[posititon] = 0;
}
System.out.println("Position:"+posititon+",value:"+value+",num:"+num+",remain:"+remain);
posititon++;
high--;
}
for(int i=0; i<Number.length; i++){
System.out.print(Number[i]+",");
}
boolean[] matcher = new boolean[10];
Arrays.fill(matcher, false);
String str = "";
for(int i=0;i<Number.length; i++){
int index = 0;
for(int j=0; j<matcher.length; j++){
if(index==Number[i]&&!matcher[j]){
str = str + j;
matcher[j] = true;
break;
}
if(!matcher[j]){
index++;
}
}
}
for(int i=0; i<matcher.length; i++){
if(!matcher[i]){
str = str + i;
}
}
System.out.println(str);
}
分享到:
相关推荐
题目:Project Euler问题5——寻找最小公倍数 在Project Euler的问题集中,问题5要求我们找到能被1至20所有数字整除的最小正整数。这个问题实际上是在寻找这组数字的最小公倍数(LCM)。对于较小的参数值,如本例中...
Computer Networking: A Top-Down Approach, 6th Edition Solutions to Review Questions and Problems Version Date: May 2012 ...This document contains the solutions to review questions ...Problem 1 There...
24. 错误语句:不能使用运算符号(Problem 24) 在 SELECT 语句中,不能使用运算符号,例如 SELECT sal+1 FROM emp;。 25. 连接种类:左外连接、内连接、交叉连接等(Problem 25) SQL 语言中有多种连接种类,...
Question 5 (Pattern Classification, Chapter 2, Problem 24) Consider the multivariate normal density for which σij = 0 and σii = σ2 i , i.e., Σ = diag(σ2 1,σ2 2,...,σ2 d). (a) Show that the ...
出版日期: 2011-10-24 pages 页数: 432 An entertaining and captivating way to learn the fundamentals of using algorithms to solve problems The algorithmic approach to solving problems in computer ...
10. 瞬态场实例:TEAM WORKSHOP PROBLEM 24 该实例指导用户如何使用Maxwell 3D来计算瞬态场分布。用户需要创建一个瞬态场模型,并设置材料属性和边界条件。然后,用户可以使用Maxwell 3D来计算瞬态场分布。 本实例...
在这个压缩包"0-1-knapsack-problem-master (24)c.zip"中,我们可以推测它包含了一个C语言实现的0-1背包问题解决方案。C语言是一种强大的、低级别的编程语言,适用于实现高效算法。文件名中的"(24)"可能是版本号或者...
在当今的智能系统和自动化技术中,逆向控制(Inverse Control Problem)已经成为一个重要的研究领域。它主要解决如何从期望的效果出发,设计出能够实现这一效果的控制器。而在工业界,尤其是机器人和自动化设备中,...
在这个0-1-knapsack-problem-master (24).zip压缩包中,我们很可能找到了一个关于0-1背包问题的C语言实现。C语言是一种底层、高效的语言,常用于编写系统软件和高性能的应用程序,包括算法实现。 0-1背包问题的基本...
好不容易找到的最详细的对MMC算法的解释,可做为算法导论 Problem 24-5 的答案
要求参赛者用给定的n个大小为n的数通过加、减、乘、除四种运算(每个数只能使用一次)来算出数字24。每个运算结果都必须是整数,且最终结果为24。如果无法得到结果,则输出“Impossible”。这个题目考查对算法逻辑和...
提供了24名运动员在同一场比赛中投掷同一标枪的数据,需要对这些数据进行统计分析,建立合适的数学模型来揭示标枪飞行过程中的运动规律。可能涉及到的数学模型包括抛体运动方程、空气阻力模型以及运动员技巧与飞行...
例如,给定质数2, 3, 和 5,Hamming序列H(2, 3, 5)是2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, ...。题目要求我们找到H(p1, p2, p3)序列中的第i个元素,其中i是一个给定的正整数。 输入数据包括三...
### 第3届Mathorcup数学建模竞赛优秀论文-ProblemC(English)-ProblemC.doc #### 关键知识点 ##### 一、Mathorcup数学建模挑战赛简介 Mathorcup数学建模挑战赛是一项旨在提高大学生数学应用能力、创新能力和实践...
本文档基于IBM Redbooks发布的《Problem Solving and Troubleshooting in AIX Version 4.3》(SG24-5496-00),详细介绍了AIX 4.3版本中的问题诊断和故障排除方法,旨在帮助系统管理员更好地理解和处理AIX系统中的...
该项目是针对扩展TOP(Team Orienteering Problem)的多无人机任务分配算法的测试基准设计源码,包含24个文件,其中15个PNG图片文件、4个Python源文件、3个CSV数据文件、1个Git忽略文件和1个Markdown文档。...
// add image { w = 24 ; h = 30 ; demand = 246 }pk . addImageKind( 13 , 56 , 562 ); // add image { w = 13 ; h = 56 ; demand = 562 }pk . addImageKind( 14 , 22 , 1000 ); // add image { w = 14 ; h = 22 ;...
News in 3.98 2/24/2006 * Support TPageControl with tsButton style. * Fix problem on Mainmenu with ActionList. News in 3.97 2/16/2006 * Fix problem when Groupbox in ScrollBox. *Fix problem with newest...
对于文件名称列表中的"problem",这可能是包含有问题代码或资源的文件,需要进一步分析。 通过以上步骤,应该能定位并解决程序在读取24位位图时遇到的问题。记住,解决问题的关键在于理解DirectDraw的工作原理和...