我正在尝试挑战。想法如下:
“您的任务是建造一栋将要堆放n个立方体的建筑物。 底部的立方体的体积为n ^ 3,上方的立方体将为 体积为(n-1)^ 3,依此类推,直到顶部有一个 体积为1 ^ 3。
给出建筑物的总体积m。被给予m可以 您找到要构建的多维数据集数量n?如果没有这样的n 存在返回-1“
我显然看到了:
2 ³+ 1 = 9 =3²和3-1 = 2
3 ³+2³+ 1 = 36 =6²和6-3 = 3
4 ³+3³+2³+ 1 = 100 =10²和10-6 = 4
5 ³+4³+3³+2³+ 1 = 225 =15²和15-10 = 5
6 ³+5³+4³+3³+2³+1 = 441 =21²和21-15 = 6
因此,如果我认为,如果我检查确定某个数字是平方根,那么我已经可以排除一些。然后,我可以在变量1处从平方根取那个值(递增)。这些值最终将匹配,或者以前的平方根将变为负。
所以我写了这段代码:
def find_nb(m):
x = m**0.5
if (x%1==0):
c = 1
while (x != c and x > 0):
x = x - c
c = c + 1
if (x == c):
return c
else:
return -1
return -1
这行不行吗?我想念什么? 我无法通过示例集的三分之一:10170290665425347857应该为-1,并且在我的程序中为79863。
我缺少明显的东西吗?
答案 0 :(得分:3)
您遇到了浮点精度问题。即,我们有
<div class="col-md-6">
<h4>Top 10 Categories</h4>
{!! $chartCategories->render() !!}
</div>
因此,即使实际上不是正方形,也会采用内部分支:
<table border="1" width="100%">
<thead></thead>
<tbody>
<tr>
<td>1</td>
<td rowspan="4">2</td>
<td>3</td>
</tr>
<tr>
<td rowspawn="2">4</td>
<td rowspawn="2">5</td>
</tr>
<tr>
<td>6</td>
<td>7</td>
</tr>
</tbody>
</table>
如果您从this question借用了许多整数平方根选项之一,并验证了sqrt squared给出了原始数字,那么您应该对算法没问题,至少在我没有忽略某些极端情况的情况下
(在旁边:您已经注意到了关键模式。数字1、3、6、10、15 ..非常有名,并且有自己的公式,可用来解决是否存在这样的问题。一个直接起作用的数字。)
答案 1 :(得分:1)
DSM的答案是一个,但是要加上我的两分钱来改善解决方案...
Brilliant.org中的此表达式用于求和多维数据集数字:
sum of k**3 from k=1 to n:
n**2 * (n+1)**2 / 4
这当然可以解决所涉及的总量。这是四个解决方案之一(要求n和v均为正):
from math import sqrt
def n(v):
return 1/2*(sqrt(8*sqrt(v) + 1) - 1)
但是此函数还返回79863.0
。现在,如果我们将1到n的所有多维数据集求和,由于精度误差,我们得到的结果会稍有不同:
v = 10170290665425347857
cubes = n(v) # 79863
x = sum([i**3 for i in range(cubes+1)])
# x = 10170290665425347857, original
x -> 10170290665425347856
答案 2 :(得分:0)
我不知道您的答案是否正确,但是对于这个问题,我还有另一种解决方法,
def max_level(remain_volume, currLevel):
if remain_volume < currLevel ** 3:
return -1
if remain_volume == currLevel ** 3:
return currLevel
return max_level(remain_volume - currLevel**3, currLevel + 1)
然后您用max_level(m, 0)
找出答案。这需要O(n)时间和O(1)内存。
答案 3 :(得分:0)
根据我的要求,我在 PHP 中找到了一个简单的解决方案。
Object.defineProperty(obj, "name", {
value: "karl",
writable: false
});
}