买不到的数目,组合问题 博客分类: java算法 组合买不到的数
程序员文章站
2024-03-24 21:56:28
...
标题:买不到的数目
小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。
小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。
你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。
本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入:
两个正整数,表示每种包装中糖的颗数(都不多于1000)
要求输出:
一个正整数,表示最大不能买到的糖数
不需要考虑无解的情况
例如:
用户输入:
4 7
程序应该输出:
17
再例如:
用户输入:
3 5
程序应该输出:
7
资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗 < 3000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
package 买不到的数目; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { private static ArrayList<Integer> list = new ArrayList<Integer>(); public static void main(String[] args){ //test time long begin = System.currentTimeMillis(); //接收数据 String[] arr = new Scanner(System.in).nextLine().split(" "); f(0,Integer.parseInt(arr[0]),Integer.parseInt(arr[1]),0); int[] a = new int[list.size()]; for(int i =0 ;i<list.size();i++){ a[i] = list.get(i); } //排序 Arrays.sort(a); //找出连续并显示最后的结果 for(int i=1;i<a.length-15;i++){ if(a[i+10]-a[i]==10){ System.out.println(a[i]-1); break; } } long end = System.currentTimeMillis(); System.out.println("运行:"+(end-begin)/1000f+"秒"); } public static void f(int base,int n ,int m,int k){ if(k>=15){ return; } if(!list.contains(base)){ list.add(base); } f(base+n,n,m,k+1); f(base+m,n,m,k+1); } }
上一篇: 护眼色参数