问题如下:
已知一个数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的所有组合。
已知一个数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,以此类推。
然后是遍历,遍历时的方法如下,对于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;
}
}
{
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;
}
}