一个数字分解问题

问题如下:
  已知一个数A,求出A=x1+x2+x3+x4的所有组合,其中,x1,x2,x3,x4的最小值为1,他们的最大值分别为给定的一个数字。
例如:A=60,x1,x2,x3,x4的最大值分别为x1=13,x2=26,x3=24,x4=19,则求出这几个数相加得60的所有组合。
 
我的方法如下:
若x1,x2,x3,x4的最大值加在一起也小于A,则无解
然后是遍历,遍历时的方法如下,对于Xi,遍历范围是A-(Max(X(i+1))+...+Max(X4))到Max(Xi)
也就是对于X1,范围是1~13,对于X2,由于60-24-19-X1到26,以此类推。
public class Summary
{
 public static void main(String[] args)
 {
  int maxX1 = 13;
  int maxX2 = 26;
  int maxX3 = 24;
  int maxX4 = 19;
  int sum = 60;
  int l;
  for (int i = max(sum - maxX2 - maxX3 - maxX4, 1); i <= maxX1; i++)
  {
   for (int j = max(sum - i - maxX3 - maxX4, 1); j <= maxX3; j++)
   {
    for (int k = max(sum - i - j - maxX4, 1); k <= maxX3; k++)
    {
     l = sum - i - j - k;
     if (l > 0)
     {
      System.out.println(i + " " + j + " " + k + " " + l);
     }
    }
   }
  }
 }
 
 private static int max (int i, int j)
 {
  if (i > j)
  {
   return i;
  }
  return j;
 }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值