华为OJ 初级:称砝码

来源:互联网 发布:淘宝直通车怎么收费的 编辑:程序博客网 时间:2024/05/23 20:12

描述

现有一组砝码,重量互不相等,分别为m1、m2……mn;他们可取的最大数量分别为x1x2……xn。现在要用这些砝码去称物体的重量,问能称出多少中不同的重量。

 

注:

称重重量包括0

要对输入数据进行校验

 

方法原型:public static int fama(int n, int[] weight, int[] nums)


知识点字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归运行时间限制10M内存限制128输入

int nn表示有多少组重量不同的砝码,1<=n<=10<><=n<=10<><=n<=10<><=n<=10<><=n<=10<><=n<=10<><=n<=10<><=n<=10<>

int[] weight:表示n组砝码的重量,1<=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<>

int[] num:表示n组砝码的最大数量,1<=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<>


输出

利用给定的砝码可以称出的不同的重量数

样例输入2 1 2 2 1样例输出5
import java.util.HashSet;import java.util.Scanner;import java.util.Set;//复制的别人的方法public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(); // 种类数int[] weight = new int[n];// 砝码重量数组int[] nums = new int[n]; // 砝码数量数组Set<Integer> result = new HashSet<Integer>();// 保存可能的重量数的setfor (int i = 0; i < n; i++) {weight[i] = sc.nextInt();}for (int i = 0; i < n; i++) {nums[i] = sc.nextInt();}sc.close();getWeightSet(0, 0, weight, nums, result);System.out.println(result.size());}public static void getWeightSet(int curWeight, int curIndex, int[] weight,int[] nums, Set<Integer> result) {// 递归结束条件,当已遍历完所有砝码种类则将重量加入到集合中if (curIndex >= weight.length) {result.add(curWeight);return;}// 递归转移方式,对当前索引的每一种可能数量递归调用该方法for (int i = 0; i <= nums[curIndex]; i++) {getWeightSet(curWeight + weight[curIndex] * i, curIndex + 1,weight, nums, result);}}}



0 0
原创粉丝点击