⑴ java 遞歸演算法問題:(n,k)=(n-1,k-1)+(n-1,k)
(n,k)=(n-1,k-1)+(n-1,k)
就是說 n 個裡面要選 k 個,分為兩組,包含 A和不包含A。
包含 A : 已經包含A了,所以總數是 n-1 個了;同理,已經包含了A,所以只要選 k -1 個就可以了,所以為 (n-1,k-1)。
不包含A:已經不包含A了,所以總數是 n-1 個;還是選 k個,所以為(n-1,k)。
無限遞歸即可以了。
⑵ JAVA演算法題目:int數組內取數相加湊數
首先觀察數組可以排除幾個數:588,4375,5184 因為他們如何相加也不會以0結尾。限於篇幅,部分代碼如下,剩餘的循環可以自己添加下,採用窮舉法:
public class DoMain {
public void doit(){
int[] a = new int[] { 460, 720, 1250, 1800, 2200, 3080, 4100,
6510, 6900, 9000 };
for(int i1=0;i1<a.length;i1++){
for(int i2=i1+1;i2<a.length;i2++){
if(a[i1]+a[i2]==13750){
System.out.println(a[i1]+";"+a[i2]);
}
for(int i3=i2+1;i3<a.length;i3++){
if(a[i1]+a[i2]+a[i3]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]);
}
for(int i4=i3+1;i4<a.length;i4++){
if(a[i1]+a[i2]+a[i3]+a[i4]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]);
}
for(int i5=i4+1;i5<a.length;i5++){
if(a[i1]+a[i2]+a[i3]+a[i4]+a[i5]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]+";"+a[i5]);
}
for(int i6=i5+1;i6<a.length;i6++){
if(a[i1]+a[i2]+a[i3]+a[i4]+a[i5]+a[i6]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]+";"+a[i5]+";"+a[i6]);
}
for(int i7=i6+1;i7<a.length;i7++){
if(a[i1]+a[i2]+a[i3]+a[i4]+a[i5]+a[i6]+a[i7]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]+";"+a[i5]+";"+a[i6]+";"+a[i7]);
}
}
}
}
}
}
}
}
}
public static void main(String[] args) {
DoMain main= new DoMain();
main.doit();
}}