计算“ BAD”值的数量

时间:2019-06-11 06:19:31

标签: algorithm

我正在解决一个问题,并且遇到了这个问题。

假设我们有一些黏土球。每个球都有一定的值;每个球的值可以是任何正整数。最初,对于X到X + Y−1(包括X和Y + Y-1)之间的每个值,我们将无限供应具有该值的球。

这些球具有特殊的属性:可以将它们中的任意两个混合以创建一个新的球。如果原始球的值为a和b(可能为a = b),则新球的值为a + b。以这种方式创建的球也可以用于混合其他球。我们可以随意选择任意次数随意混合球。

如果没有办法获得值v的球,我们将值v(v> 0)设为BAD;否则,值v为良好。我们要制作具有所有良好值的球,并且想知道BAD值的数量。

注意:球的GOOD值数量是无限的,但是可以证明,对于Y≥2,BAD值的数量始终是有限的。

对于给定的X和Y,设计一个过程来查找BAD值的数量。

例如

X = 1 ; Y = 2

我们得到了[1, 1 + 2 - 1] == [1, 2] == {1, 2}个球。回答 0 ;可以获取具有X和Y的所有可能值的球。

X = 3 ; Y = 3  

我们得到了[3, 3 + 3 - 1] == [3, 5] == {3, 4, 5}个球。 回答 2 ;由于无法制作值为12的球。

我以为小于X的值是无法实现的,但这似乎是错误的,也许我错过了一些东西。

1 个答案:

答案 0 :(得分:2)

解决此类问题时,请从玩数字游戏开始。假设我们给了2个球(Y = 2),让它们分别为1112X = 11)。我们可以创建

  • 1球开始:1112
  • 2个球中:222324
  • 3个球中:33343536
  • 4个球中:4445464748

....

我们有个孔(坏数字):大小为1..10的{​​{1}},然后大小为10的{​​{1}},然后是13..21大小为9。你看到图案了吗?孔的总和(错误数的数量)是

25..32

现在如果8可以解决问题了:它是拟人化进展的总和

10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 == 55

继续做Y = 2,例如我们得到X - 1 + X - 2 + ... + 2 + 1 == (X - 1) * (X - 2) / 2 个球(Y = 33Y = 3)。我们可以创建:

  • 11, 12, 13球开始:X = 11111
  • 12个球中:132222324
  • 25个球中:26333343536,{{1 }}
  • 37个球中:38394444546,{{1 }},4748

让我们数一数漏洞:49然后50然后51,然后是52

1..10

可以看到图案吗?您能解决14..21吗?请注意区别:

26..33

您现在可以为40..43编写公式吗?对于10 + 8 + 6 + 4 + 2 == 30 Y = 3

 X = 11; Y = 2   ->   10 + 9 + 8 + 7 + ... + 1
 X = 11; Y = 3   ->   10 + 8 + 6 + 4 + 2

对于任意Y = 3

Y = 4

对于任意Y = 5 X = 11; Y = 4 -> 10 + 7 + 4 + 1 x = 11; Y = 5 -> 10 + 6 + 2 (我们必须对所有项求和)?

Y

代码:设为 C#

 X = 11; Y       ->   10 + (10 - 1 * (Y - 1)) + (10 - 2 * (Y - 1)) + ...

一些测试(或演示):

X

结果:

Y