我当时正在解决一个问题,却遇到了这个问题。
假设我们有一些粘土球。每个球都有一定的值;每个球的值可以是任何正整数。最初,对于X和X+Y−1 (包括)之间的每个值,我们有一个无限的球提供这个值。
球有一个特殊的属性:任何两个球都可以混合来创建一个新的球。如果原始球的值为a和b(可能是a=b),则新球具有值a+b。这样创建的球也可用于混合其他球。我们可以自由地用我们选择的任何方式来混合球。
如果没有方法获得一个值v的球,那么让我们将值v (v>0)称为坏值;否则,值v是好的。我们想用所有的好值来制造球,并且我们想知道坏值的数量。
注意:有无限个好的球值,但是可以证明,对于Y≥2,坏值的数量总是有限的。
对于给定的X和Y,设计一个过程来查找坏值的数量。
例如。
X = 1 ; Y = 2我们得到了[1, 1 + 2 - 1] == [1, 2] == {1, 2}球。回答;因为可以获得所有可能值的球,如X和Y。
X = 3 ; Y = 3 我们得到了[3, 3 + 3 - 1] == [3, 5] == {3, 4, 5}球。回答2;不能生成带有1和2值的球。
我认为小于X的值是不可能形成的,但它似乎是错误的,也许我遗漏了什么。
发布于 2019-06-11 07:44:13
在解决这些问题时,从开始玩数字。假设给我们2球(Y = 2),让它们是11和12 (X = 11)。我们可以创造
1 ball:11,122之球:22,23,243之球:33,34,35,364球:44,45,46,47,48……
然而,我们有漏洞(糟糕的数字):1..10 of size,10,13..21 of size,9,25..32 of size 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 ball:11,12,132球:22,23,24,25,263球:33,34,35,36,37,38,394球:44,45,46,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
X = 11; Y -> 10 + (10 - 1 * (Y - 1)) + (10 - 2 * (Y - 1)) + ...对于任意的X和Y (我们必须把所有的正项加起来)?
X; Y -> (X - 1) + (X - 1 - 1 * (Y - 1)) + (X - 1 - 2 * (Y - 1)) + ...代码:让它成为C#
private static int MySum(int X, int Y) {
int d = Y - 1; // difference
int n = (X - 1) / (Y - 1) + 1; // number of items to sum
int A1 = X - 1; // 1st item
int An = X - 1 - (n - 1) * d; // last item
return (A1 + An) * n / 2; // sum of arithmetic progression
}一些测试(或演示):
(int, int)[] tests = new (int, int)[] {
(X : 11, Y : 2),
(X : 11, Y : 3),
(X : 11, Y : 4),
(X : 11, Y : 5),
(X : 1, Y : 2),
(X : 3, Y : 3),
};
string demo = string.Join(Environment.NewLine, tests
.Select(test => $"X = {test.Item1,2}, Y = {test.Item2} => {MySum(test.Item1, test.Item2),2}"));
Console.Write(demo);结果:
X = 11, Y = 2 => 55
X = 11, Y = 3 => 30
X = 11, Y = 4 => 22
X = 11, Y = 5 => 18
X = 1, Y = 2 => 0 // test from the question
X = 3, Y = 3 => 2 // test from the questionhttps://stackoverflow.com/questions/56537609
复制相似问题