欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

买不到的数目,组合问题 博客分类: 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);
	}

}