网站开发的就业方向,北京地区网站制作公司,做网站的是怎么赚钱的,个人专业网站备案题目#xff1a; 编程题#xff1a;给定⼀组正整数数组M#xff0c;找出M数组中N项和为给定数S。如果有多对N项数字的和都等于 S#xff0c;则输出N个数的乘积最⼩的哪⼀项#xff0c;没有则返回空#xff1b; 程序如下#xff1a; 测试主程序#xff1a; 先看下测试示…题目 编程题给定⼀组正整数数组M找出M数组中N项和为给定数S。如果有多对N项数字的和都等于 S则输出N个数的乘积最⼩的哪⼀项没有则返回空 程序如下 测试主程序 先看下测试示例,一组数据为{ 1, 2, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 13, 16 }求3项和为17的最小乘积结果如下 程序如下
package com.test;import java.util.ArrayList;
import java.util.Collections;/*** 编程题给定⼀组正整数数组M找出M数组中N项和为给定数S。如果有多对N项数字的和都等于* S则输出N个数的乘积最⼩的哪⼀项没有则返回空*/
public class Test{public static void main(String[] args) {int[] array { 1, 2, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 13, 16 };ArrayList productListnew ArrayList();combine(array, array.length, 3, new int[3], 3, 17,productList);if(productList!null productList.size()0){Collections.sort(productList);System.out.println(乘积的最小值为productList.get(0));}else{System.out.println(乘积的最小值为null);}}/**** param a 待处理的正整数数组* param n 数组的长度* param m 要选择的元素的个数* param b 存放结果的数组* param bn 结果数组的个数* param s 需要求得的数组元素之和* param productList 存放所有结果的乘积*/public static void combine(int a[], int n, int m, int b[], int bn, int s,ArrayList productList) {for (int i n; i m; i--) {b[m - 1] i - 1;if (m 1) { // 一共要选m个数故m 1时才结束递归combine(a, i - 1, m - 1, b, bn, s,productList);} else {if (isSum(a, b, bn, s)) {int product1;for (int j bn - 1; j 0; j--) {productproduct*a[b[j]];System.out.print(数据为: a[b[j]] );}System.out.println(乘积为:product);productList.add(product);}}}}/*** 判断数组b对应的数组a中的元素之和是否为s* param a 数组a* param b 数组b* param n 数组b的长度* param s 和* return true:数组b对应的数组a中的元素之和是s* false:数组b对应的数组a中的元素之和不是s*/public static boolean isSum(int a[], int b[], int n, int s) {int ret 0;for (int i 0; i n; i) {ret a[b[i]];}return s ret;}
}