我正在解决一个问题,并且遇到了这个问题。
假设我们有一些黏土球。每个球都有一定的值;每个球的值可以是任何正整数。最初,对于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 ;由于无法制作值为1
和2
的球。
我以为小于X的值是无法实现的,但这似乎是错误的,也许我错过了一些东西。
答案 0 :(得分:2)
解决此类问题时,请从玩数字游戏开始。假设我们给了2
个球(Y = 2
),让它们分别为11
和12
(X = 11
)。我们可以创建
1
球开始:11
,12
2
个球中:22
,23
,24
3
个球中:33
,34
,35
,36
4
个球中:44
,45
,46
,47
,48
....
我们有个孔(坏数字):大小为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 = 3
)3
(Y = 3
)。我们可以创建:
11, 12, 13
球开始:X = 11
,1
,11
12
个球中:13
,2
,22
,23
,24
25
个球中:26
,3
,33
,34
,35
,36
,{{1 }} 37
个球中:38
,39
,4
,44
,45
,46
,{{1 }},47
,48
让我们数一数漏洞: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