蓝桥杯ITeye - 千亿集团

蓝桥杯ITeye

2019年02月23日08时10分12秒 | 作者: 思菱 | 标签: 对应,测验,算法 | 浏览: 1458

本文转载自:http://blog.csdn.net/keepthinking_/article/details/9262825

 

标题:买不到的数目

    小明开了一家糖块店。他独出机杼:把水果糖包成4颗一包和7颗一包的两种。糖块不能拆包卖。

    小朋友来买糖的时分,他就用这两种包装来组合。当然有些糖块数目是无法组合出来的,比方要买 10 颗糖。

    你可以用计算机测验一下,在这种包装状况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。

    本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。

输入:
两个正整数,表明每种包装中糖的颗数(都不多于1000)

要求输出:
一个正整数,表明最大不能买到的糖数

不需要考虑无解的状况

例如:
用户输入:
4 7
程序应该输出:
17

再例如:
用户输入:
3 5
程序应该输出:

7

剖析:

这道题的一般解法不难想到,这两天刚好学习了扩展的欧几里得算法,所以觉得这道题可以凭借该算法来进步功能,由于刚触摸该算法一知半解,经过艰苦的测验,开端得到了一种解法,不过不敢确保必定正确,所以贴出来,假如哪位发现有错,请费事奉告一声,我好修正或许删掉代码。

首要理论依据来自该篇文章:http://www.cppblog.com/yuanyuelang/articles/95378.html

该文章中有这样一个等式:a(x+qb)+b(y-qa)=c; q为恣意整数

在代码中,m对应这儿的a,n对应这儿的b

从该等式中,咱们可以得到:x+qb y-qa =0  (1)

其间,x=(c/d)*x‘  y=(c/d)*y 

其间d=1,所以x=c*x ,y=c*y

关于x和y可以经过扩展的欧几里得算法求得,

则 式子(1)可以转换成:

c*x+qb (2)

c*y-qa (3)

满意以上两个式子,不知道变量有c和q,验算了良久,仍是不能在这儿进一步直接得到c的值,所以暂时只能退而一个一个验证c是否满意条件了,

假如y‘ 0,那么x必定 0,结合(2)(3),(将a替换成m,b替换成n)

可以得到:

-m*x*q =|x*y*c| =n*y*q  (4)

到了这儿就可以直接测验c的取值了,当c取什么值,使得q无解(q是整数)

如 m=3,n=4 (x‘=-1,y’=1)

依据(4)有:

3q =c =4q  (这儿假如可以直接得出c的值就不用去测验了,可是暂时想不到怎样直接得出c的值)

当c取什么值,使得q无解,c从m*n开端向下递减,

当c=12,11,10,9,8,7,6,的时分,q都有解

当c=5的时分,q是无解的

所以c=5是对应的答案

以上是y‘ 0的状况,假如y 0,则对应的(4)式为:

-n*y*q =|x*y*c| =m*x*q (5)

如:m=4,n=7 (x=2,y=-1)

依据(5)式有:

7q =2c =8q

当c=28~18 ,q都有解

当c=17 ,q无解

所以c=17为成果

以下就是对应的java代码:

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表千亿集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    蓝桥杯ITeye

    对应,测验,算法
  • 2
  • 3
  • 4

    合肥java编程培训百度网页

    运用,培训,编程
  • 5
  • 6

    高性能网站建造攻略ITeye

    运用,脚本,博客
  • 7

    根本语法总结ITeye

    总结,目标,语法
  • 8

    JMS——集成Spring千亿集团

    监听,行列,代码
  • 9
  • 10

    单例?千亿集团

    答案,线程