历届试题 买不到的数目
问题描述
小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。
小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。
你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。
本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入格式
两个正整数,表示每种包装中糖的颗数(都不多于1000)
输出格式
一个正整数,表示最大不能买到的糖数
样例输入1
4 7
样例输出1
17
样例输入2
3 5
样例输出2
7
上界是最小公倍数,然后枚举,所有情况。
1 #include<stdio.h> 2 #include<iostream> 3 #include<string.h> 4 using namespace std; 5 int lcm(int a,int b) 6 { 7 int r; 8 r=a%b; 9 while(r) 10 { 11 a=b; 12 b=r; 13 r=a%b; 14 } 15 return b; 16 } 17 int main() 18 { 19 int a,b,n,i,j,xmax,ymax,k,flag; 20 scanf("%d %d",&a,&b); 21 int len=a*b/lcm(a,b); 22 //printf("lcm=%d\n",len); 23 int ans=0; 24 for(k=max(a,b);k<=len;k++) 25 { 26 flag=0; 27 xmax=k/a; 28 ymax=k/b; 29 for(i=0;i<=xmax;i++) 30 { 31 for(j=0;j<=ymax;j++) 32 { 33 if(a*i+b*j==k) 34 {flag=1; 35 i=xmax; 36 j=ymax; 37 } 38 } 39 } 40 if(!flag&&k>ans) 41 ans=k; 42 } 43 printf("%d\n",ans); 44 return 0; 45 }