暴力法判断平衡等式

均衡等式算法实现与应用

给出一组数,若能分成两组和相等的数,则说这组数能构成均衡等式,比如1.2.3.4,10可以构成形如1+2+3+4=10的均衡等式,但1,2,3,4,5就不能构成均衡等式。

package com.algorithm.odd;

import java.util.Collections;
import java.util.LinkedList;


public class BalancEquation {

	public static boolean judge(int[] array){
		int length=array.length;
		int step=1;
		int[] result=new int[length];
		int sum=0;
		int num=0;
		LinkedList<Integer> list=new LinkedList<>(Collections.nCopies(length, 0));/*初始化*/
		LinkedList<Integer> list1=new LinkedList<>();
		int listEnd=length;
		int count=0;
		for(int e:array){
			sum=sum+e;
		}
		for(step=0;step<length;step++){
			/*count=0;*/
			for(int i=0;i<list.size()/*listEnd*/;i++){
				for(int j=step+i;j<length;j++){
					num=array[j]+list.get(i);      /*长度为n的组合实在长度为n-1的组合的基础上产生的*/
					System.out.println("num="+num);
					if(2*num==sum){
						return true;
					}
					list1.add(num);
					/*count++;*/
				}
				if(step==0) break;
			}
			/*listEnd=count;*/
			list.clear();
			list.addAll(list1);
			list1.clear();
		}
		return false;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] array=new int[]{1,2,3,4,10,11,9};
		System.out.println("能构成均衡等式:"+judge(array));
	}

}

输出结果:

num=1
num=3
num=4
num=5
num=11
num=12
num=10
num=3
num=6
num=7
num=13
num=14
num=12
num=6
num=10
num=16
num=17
num=15
num=10
num=20
能构成均衡等式:true

需要说明的是代码注释处,这里有这样一种规律,长度为n的组合是在长度为n-1的组合的基础上产生的。如1,2,3,4,10,11,9,所有长度为1的组合为(1),(2),(3),(4),(10),(11),(9)共7种,把它们存在list中;长度为2的组合这样产生,从list中取出长度为1的第1种组合,即1,然后得到(1,2),(1,3),(1,4),(1,10),(1,11),(1,9),再从list中取长度为1的第2中组合,得(2,3,),(2,4),(2,10),(2,11),(2,9),之后以此类推,所有长度为n的组合都和长度为n-1的组合存在这种关系。具体细节见代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值