买不到额数目

来源:互联网 发布:软件开发详细设计文档 编辑:程序博客网 时间:2024/04/29 02:50


标题:买不到的数目


    小明开了一家糖果店。他别出心裁:把水果糖包成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;
}

  
0 0
原创粉丝点击