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##笔试题目#
全部评论
这样写肯定超出范围了
点赞 回复 分享
发布于 2018-09-01 08:14
楼主,你Java投的什么岗位
点赞 回复 分享
发布于 2018-08-31 22:42

相关推荐

敢逐云霄志:你打招呼语怎么能这么长,hr都没看下去的欲望,简明扼要说重点,就读于某某学校某某专业,26届应届毕业生,学信网可查,先后在某某公司实习过(如有),然后做过什么项目,想找一份什么样的工作,可实习几个月以上,期待您的回复。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务