java深度搜索解决破碎的砝码

本文介绍了一个使用Java实现的算法,该算法旨在找出四个整数(作为砝码重量),它们的总和为40,并且这四个整数可以组合出0到40之间的所有整数重量。通过四层循环遍历可能的砝码组合,并使用递归函数计算这些砝码所能形成的重量集合。
摘要由CSDN通过智能技术生成
import java.util.*;
class 破碎的砝码3
{
	static TreeSet<Integer> ts;
	public static void main(String[] args)
	{
	 for (int i = 1; i <= 40; i++)
         for (int j = i + 1; j <= 40 - i; j++)
            for (int k = j + 1; k <= 40 - j - i; k++)
                for (int l = k + 1; l <= 40- k - j - i; l++)
					{
						if(i+j+k+l==40)
							if(fama(i,j,k,l))
								{
										System.out.println("找到破碎的砝码\n"+i+"...."+j+"...."+k+"...."+l);
								}
					}
	}

	public static boolean fama(int i,int j,int k,int l)
	{
		int[] suipian=new int[]{i,j,k,l};
		int sum=0;
		int ii=0;
		ts=new TreeSet<Integer>();
		fuhe(ii,sum,suipian);
		if(ts.size()==41)
			return true;
		return false;
	}

	public static void fuhe(int i,int sum,int[] suipian)
	{
		if(i==4)
		{
			int p=sum>0?sum:-sum;
			ts.add(p);
			return;
		}
		int temp=i;
		i++;
		fuhe(i,sum,suipian);
		fuhe(i,sum+suipian[temp],suipian);
		fuhe(i,sum-suipian[temp],suipian);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值