求一算法(c的也行) CSDN算法版关于排列与组合的贴子多得可以用来砌长城了。去搜下吧。先转篇给你。http://expert.csdn.net/Expert/topic/2495/2495045.xml?temp=.9805719 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是一个常见的递归问题。递归:就是利用程序嵌套调用的原理完成有规律且工程的后一项依赖前面的结果进行的工作。上面的问题你可以这样理解:这是一个1 2 3 4 5这些数字按照不同的顺序排列(在离散数学里面是错排问题)。这个问题的解决方法就是利用递归,例如:1)2)3)4)5每个括号表示一个层次,你只要调用函数swap将数列分组进行交换即可,在方法最里层是将最内部的两个数交换,以次将里面的两个数作为一组然后与倒数第3个交换,如此下去,这就是算法描述下面是java算法(针对字母的排序):import java.io.System.*;//^^^^^^^^^^^^^主程序public void anagram(String word){ int numofChar=word.length(); if(numofChar==1){ System.out.println(word);} else{ for(int i=1;i<=numofChar;i++){ char firstLetter=word.charAt(0); suffix=word.substring(1,numofChar); anagram(suffix);//递归调用 word=suffix+firstLetter;} to fishstudio() : 能给出代码吗?上面的还不对啊!!! 你想: 有123, 你的程序结果为 23451 34512 45123 51234 12345按排列组合来考虑,应有5*4*3*2*1(120)种情况,(当然包括13452-25431这种情况)递归时应有: eg:123 23 32 123 213 231 132 312 321///////////////////////////////////////////////////////那位有代码,能贴出来吗?谢谢 public class test{ static int size=0; public static void permutation(int[] a){ _permutation(a,0); } public static void _permutation(int[] a,int i){ if(i==a.length-1){ size++; print(a); } for(int j=i;j<a.length;j++){ swap(a,i,j); _permutation(a,i+1); swap(a,i,j); }}public static void swap(int[] a,int i,int j){ if(i!=j){ int temp=a[i]; a[i]=a[j]; a[j]=temp; }}private static void print(int[] a){ for(int i=0;i<a.length;i++) System.out.print(a[i]+" "); System.out.println();}public static void main(String[] args){ int[] a={1,2,3,4,5}; permutation(a); System.out.println("total possibilities: "+size);}} Comparable compareTo 求助Ireport报表中第一页与以后几页显示不一样问题,100分 请教下 ImageScale 这个类,为什么我在jdk api 里查不到? 关于一个计数器的问题 帮帮忙,看看代码问题啊 try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?? Java 中的相对路径怎么用啊? 小问题 有几个问题请教,100分! 那位大哥可以帮我看看,我是哪里做错了!!(非常简单,我是初学者) 稀奇问题 ,小弟跪拜请教,谢谢!急急急! 小弟求救!!(有100分)
依赖前面的结果进行的工作。上面的问题你可以这样理解:这是一个1 2 3 4 5这些数字按照
不同的顺序排列(在离散数学里面是错排问题)。这个问题的解决方法就是利用递归,例如:1)2)3)4)5
每个括号表示一个层次,你只要调用函数swap将数列分组进行交换即可,在方法最里层是将最内部的两个数交换,以次将里面的两个数作为一组然后与倒数第3个交换,如此下去,这就是算法描述
下面是java算法(针对字母的排序):
import java.io.System.*;
//^^^^^^^^^^^^^主程序
public void anagram(String word){
int numofChar=word.length();
if(numofChar==1){
System.out.println(word);
}
else{
for(int i=1;i<=numofChar;i++){ char firstLetter=word.charAt(0);
suffix=word.substring(1,numofChar); anagram(suffix);//递归调用 word=suffix+firstLetter;}
能给出代码吗?上面的还不对啊!!!
你想:
有123,
你的程序结果为
23451
34512
45123
51234
12345
按排列组合来考虑,应有5*4*3*2*1(120)种情况,(当然包括13452-25431这种情况)
递归时应有:
eg:123
23 32
123 213 231 132 312 321
///////////////////////////////////////////////////////
那位有代码,能贴出来吗?谢谢
static int size=0;
public static void permutation(int[] a){
_permutation(a,0);
}
public static void _permutation(int[] a,int i){
if(i==a.length-1){
size++;
print(a);
}
for(int j=i;j<a.length;j++){
swap(a,i,j);
_permutation(a,i+1);
swap(a,i,j);
}
}
public static void swap(int[] a,int i,int j){
if(i!=j){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
private static void print(int[] a){
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();
}
public static void main(String[] args){
int[] a={1,2,3,4,5};
permutation(a);
System.out.println("total possibilities: "+size);
}
}