JAVA寻找任意元素之和最接近指定数值的程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA寻找任意元素之和最接近指定数值的程序相关的知识,希望对你有一定的参考价值。

比如说我想找x,y,z,让x+y+z最接近100的组合,将x,y,z全部罗列出来,程序要如何写?谢谢!
x,y,z 全是正整数

怎么定义“最接近”?如果x,y和z都是整数的话,那么就等同于求所有和为99或101的三个数组合,但这样的话你还得给定三个数的取值范围,否则依然会有无穷多个可能。追问

x,y,z全部都是正整数,相等或者最接近一百

参考技术A 不知道问什么,我就按照的理解来做了,xyz是int且是正整数,相加等于99(若果壹佰的话改一下就是了),代码如下:
public class xyz

public static void main(String[] args)

int x=0;
int y=0;
int z=0;

for ( x=0 ;x<100;x++)
for(y=0;y<100-x;y++)
z=99-x-y;
System.out.println(x+" "+y+" "+z);




这样会把所有xyz的可能列出来,你也可以用个数组来装他们追问

x+y+z 需要最接近一百,和不是一个确定值,我想要找到这个最接近的和。
我实际要计算sum=x*y*z*100+x*y*z*120,使得sum最接近10000的sum以及x,y,z值,一个个试太麻烦了,想做个小程序算一下。明白?

追答

有你哪里可以知道sum=220*(xyz),简化就是11(xyz)最接近500的xyz组合,且xyz不能超过50.那就可以变编程了


public class xyz 

public static void main(String[] args)

int x,y,z;

int sum;

int min=100;

int trueneed[]=new int[3];


/**

* 求出(11*x*y*z)其中的最接近500的xyz组合

*/

for(x=1;x<50;x++)

for(y=1;y<50;y++)

for(z=1;z<50;z++)

sum=11*x*y*z-500;

// System.out.println(sum);

if (sum<0)  //这里貌似有一个直接的math方法可以求绝对值,我忘了,你可以改的

sum=0-sum;


if(min>sum) //如果min》sum就证明新组合比旧组合更接近,修改xyz组合

min=sum;

trueneed[0]=x;

trueneed[1]=y;

trueneed[2]=z;


for (int i = 0; i < trueneed.length; i++)  //将xyz其中一个组合输出,此步可省

int j = trueneed[i];

System.out.println(j);


System.out.println("所用xyz可能组合");

// 求出所用等于sum的组合,这里是所用等于45的xyz组合,并输出,你也可以用数组来装

sum=trueneed[0]*trueneed[1]*trueneed[2];

for(x=1;x<50;x++)

for(y=1;y<50;y++)

for(z=1;z<50;z++)

if (sum==(x*y*z)) 

System.out.println(x+"\\t"+y+"\\t"+z);



本回答被提问者采纳

以上是关于JAVA寻找任意元素之和最接近指定数值的程序的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 16. 最接近的三数之和

最接近的三数之和,完整代码实现,java及python实现。

最接近的三数之和,完整代码实现,java及python实现。

最接近的三数之和,完整代码实现,java及python实现。

两数之和,三数之和,最接近的三数之和,四数之和

16. 最接近的三数之和 java Java 中Pair的使用