ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

买不到的数目(C语言)

2020-03-08 12:45:03  阅读:263  来源: 互联网

标签:买不到 17 int 出来 样例 C语言 公倍数 return 数目


题目描述
小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。
小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。
你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。
本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入格式
两个正整数,表示每种包装中糖的颗数(都不多于1000)
输出格式
一个正整数,表示最大不能买到的糖数
样例输入1
4 7
样例输出1
17
样例输入2
3 5
样例输出2
7

思路分析
由题目已知,设两包数目分别为4、7,那么我们分析得到能凑出来数目为4,7,8,11,12,14,15 ,16,18,19,20,21,22,23,24,25……,其中18=11+7,19=12+7,20=16+4,21=14+7,22=18+4,23=19+4……,所以得到的17后面的数都能凑出来,17为凑不出来的最大数目。
我们设置一个条件,即最小公倍数以上的数肯定能凑出来,a,b为输入的每袋中的数目,设c是1到最大公倍数的其中一个数,那么就有方程ax+by=c,所以(c-ax)%b=0(即y为整数)时代表能凑出来,当(c-xa)%b不等于0时,说明这个数就是第一个不能凑出来的最大的数。

代码实现

#include<stdio.h>
int gys(int a,int b)   //求最大公约数
{  
 if(b==0)
  return a;
 else
  return gys(b,a%b);
}
int judge(int a,int b,int c)
{   
 while(c>0)
 {
 if(c%a==0 || c%b==0)
  return 0;         //能凑出来,返回0
  c=c-a;           
 }
 return 1;    
}
int main()
{  
 int a,b,c,i;
 scanf("%d%d",&a,&b);
 c=a*b/gys(a,b);
  
 for(i=c-1;i>0;i--)    //最小公倍数是肯定能凑出来的,从最小公倍数-1开始,枚举
 {
  if(judge(a,b,i))   //判断是否能凑出来
  {  
   printf("%d\n",i);
   break;
  }
 }
 return 0;
}

标签:买不到,17,int,出来,样例,C语言,公倍数,return,数目
来源: https://blog.csdn.net/matchless_QYW/article/details/104730240

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有