问题描述
小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。
小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。
你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。
本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入格式
两个正整数,表示每种包装中糖的颗数(都不多于1000)
输出格式
一个正整数,表示最大不能买到的糖数
样例输入1
4 7
样例输出1
17
样例输入2
3 5
样例输出2
7
//买不到的数目 自己理解后打出来的 //利用输入a b 循环相乘又不能超过n(我们定义的比较大的数) //然后用数组标记可以买到的数 标记为1 不能买默认都是0 //最后遍历数组 如果有连续的a 是可以买到的 那 减去a最近的不能买到 标记为 //0的那个数值就是 最大买不到数目 其中a要保证是小的那个输入数就行了 /* #include <iostream> #include <algorithm> #include <cstring> #include <cmath> using namespace std; long long n=100000; int d,x; int cha(int a[]) { int sum=0; for(int i=0;i<n;i++) { if(a[i]==1) { sum++; if(sum>=x) return i-x;//如果连续都可以买到 那减去x就是不能买的数目 } else { sum=0; } } return -1; } void f(int a,int b) { int c[n]; for(int i=0;i<n/a;i++) //为了确保后面的乘a b 不会溢出 for(int j=0;j<(n-i*a)/b;j++) { if(i*a+b*j < n) c[i*a+j*b] =1;//表示可以找到糖果 } cout << cha(c); } int main() { cin >> x >> d; if(x>d) { int t=x; x=d; d=t; } f(x,d); }
实现代码
时间: 2024-10-17 02:17:56