2018腾讯 Java工程师 算法题
题目:小明有X首长度为A的音乐,和Y首长度为B的音乐,小明要利用这些音乐组合成长度刚好为K的混音,
不考虑顺序的情况下,请问有多少种组合方式?
输入:K
A X B Y
输出:组合方式的个数
解题思路:我算法不太好,本来想用动态规划来做,但想半天想不出来,最后直接从0到X遍历音乐A,
当B和K满足组合条件,就用排列组合的方式算出当前组合方式的种类,最后将结果累加,就是我们要求的
最终结果。
方法比较笨拙,如果有算法大神,还望多多赐教。
import java.util.Scanner;public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int K = sc.nextInt();
int A = sc.nextInt();
int X = sc.nextInt();
int B = sc.nextInt();
int Y = sc.nextInt();
System.out.println(K+","+A+","+X+","+B+","+Y);
int res = 0;
for (int i = 0; i <= X; i++) {
if((K-i*A)%B == 0 && (K-i*A)/B <= Y){
int l = (K-i*A)/B;
res += support(X, i)*support(Y, l);
}
}
System.out.println(res);
}
public static int support(int X, int i){
return support2(X)/(support2(i)*support2(X-i));
}
public static int support2(int x){
if(x>0){
return x*support2(x-1);
}else{
return 1;
}
}
}
#腾讯##Java##笔试题目#
小天才公司福利 1176人发布