已知漏单后的总金额 找出总订单中漏掉的订单

如 错误总金额为6
订单数据为 3,2,4,3,1
找出可能漏掉的订单(数组下标)
代码如下:

//	err_sum 有错的和
//	a 明细
//	k 当前处理的位置
//	cur_sum 前边的元素累加和
	//b 记录取舍
	public static void F(int err_sum, int[] a,int k, int cur_sum, boolean[] b) {
		if(cur_sum > err_sum) return;//累加的金额已经超过错误金额 
		if(err_sum == cur_sum) {
			for(int i=0;i<b.length;i++) {
				if(b[i] == false) System.out.print( i + " ");
			}
			System.out.println();
			return;
		}
		if(k >=a.length) return; //k超出a的范围
		//注意出口顺序
		
		b[k]=false;
		F(err_sum,a,k+1,cur_sum,b);//不添加第K个元素
		b[k]=true;
		cur_sum += a[k];
		F(err_sum,a,k+1,cur_sum,b);//添加第K个元素 第K个元素添加的情况已在此循环遍历完毕
		b[k] = false;//回溯
	}
	public static void main(String[] args) {
		int sum = 6;//错误的总金额
		int[] a = {3,2,4,3,1};//账单数据
		boolean[] b = new boolean[a.length];//a的对应项是否传入
		F(6,a,0,0,b);
	}
}

思路:判定分为两种 取该订单 与 不取该订单 并确定出口进行循环
注意:回溯!

发布了35 篇原创文章 · 获赞 0 · 访问量 659

猜你喜欢

转载自blog.csdn.net/Azadoo/article/details/104665770
今日推荐