标题:买不到的数目
小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。
小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。
你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。
本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入:
两个正整数,表示每种包装中糖的颗数(都不多于1000)
要求输出:
一个正整数,表示最大不能买到的糖数
不需要考虑无解的情况
例如:
用户输入:
4 7
程序应该输出:
17
再例如:
用户输入:
3 5
程序应该输出:
7
资源约定:
峰值内存消耗 < 64M
CPU消耗 < 3000ms
标记数组, 如果当前位 - a, -b为1那么说明这个位置可以由之前-a. 或者-b的而得
如果是每袋糖果装一千个, 输出2013
如何用纯数学方法解决这个问题, 还不清楚, 不过我猜, 应该有吧
#include<stdio.h>#define N 10000000
int candy[N];
int main(){
int i;
int a, b, min;
int count;
scanf("%d%d", &a, &b);
candy[a] = candy[b] = 1;
min = a < b ? a : b;
//printf("...%d %d\n", candy[min - b], candy[-100]);
count = 0;
for(i = min; i < N; i++){
//printf("%d %d\n", i, candy[i]);
if((i >= a && candy[i - a] == 1) || (i >= b && candy[i - b] == 1)){
count++;
candy[i] = 1;
}
else
count = 0;
if(count == min){
printf("%d\n", i - min);
break;
}
}
return 0;
}