题解 | #称砝码#
称砝码
http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
最简单最容易理解的解法
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashSet; import java.util.Set; public class Main { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String str =""; while((str = reader.readLine()) !=null){ String str1 = reader.readLine(); String str2 = reader.readLine(); int len = Integer.parseInt(str); int[] a = new int[len]; int[] b = new int[len]; String[] c = str1.split(" "); String[] d = str2.split(" "); Set<Integer> set = new HashSet(); for (int i = 0; i < c.length; i++) {//依次遍历每个砝码 Integer[] x = new Integer[set.size()]; set.toArray(x); int s1 = Integer.parseInt(c[i]); int s2 = Integer.parseInt(d[i]); while(s2>0) {//依次遍历砝码数 set.add(s1 * s2);//每个砝码与砝码数相乘 for (Integer n : x) {//将前一个砝码可能性与当前砝码称重相加 set.add(n+s1*s2); } s2--; } } System.out.println(set.size()+1); } } }