输入:
n:4表示元素个数
a={1,2,4,7}数组
k: 13表示部分和
输出:
打印出部分和的组合方式
package 深度递归;
import java.util.ArrayList;
import java.util.Scanner;
import static java.lang.System.exit;
/*
n:元素个数 4
a:数组{1,2,4,7}
k:部分和 13
*/
public class case10_部分和 {
static int kk;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] a=new int[n];
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
}
int k=sc.nextInt();
kk=k;
dfs(a,k,0, new ArrayList<Integer>());
}
private static void dfs(int[] a, int k, int cur,ArrayList<Integer> ints) {
//出口
if(k==0){
//输出ints
System.out.print("yes"+"("+kk+"=");
for(int i=0;i<ints.size();i++){
System.out.print(ints.get(i)+(i==(ints.size()-1)?"":"+"));
}
System.out.println(")");
exit(0);
}
if(k<0||cur==a.length){//没有找到
return;
}
//不选当前元素
dfs(a,k,cur+1,ints);
//选当前元素
ints.add(a[cur]);
int index=ints.size()-1;//添加元素的下标,ArrayList添加元素是向尾部添加元素
dfs(a,k-a[cur],cur+1,ints);
ints.remove(index);//走不通回溯
}
}