一个糖果店只有m颗一包和n颗一包的包装,求解一个顾客不能买到的最大数目的糖。(m和n为任意值)
输入
4 7
输出
17
分析
0 0 0 4 0 0 7 8 0 0 11 12 0 14 15 16 0 18 19 20 21 .。。。。。。
只要连续出现了最小包装个数的数字就可以找出顾客不能买到糖的最大数目的。
代码:
public class L1 {
static int n=1000*10;
public static void main(String[] args) {
f(4,7);
}
private static void f(int a, int b) {
int da[] = new int[n];//声明一个较大的数组
for(int i = 0;i<=n/a;i++){
for (int j = 0; j <=(n-i*a)/b; j++) {
if(i*a+j*b<n)//产生可以买到糖数目
da[i*a+j*b] = 1;//将该位置置为1
}
}
System.out.println(se(da,Math.min(a,b)));
}
//搜索出连续出现最小包装数
private static int se(int[] da, int min) {
int num =0;
int d=0;
for(int i =0;i<n/min;i++){
if(da[i]==1){
d=i;
num++;
if(num>=min){
break;
}
}
else{
num=0;
}
}
return d-num;
}
}