【发布时间】:2021-12-08 10:16:36
【问题描述】:
我对算法不是很好,我完全被困在这个问题上,无法找到我正在寻找的帮助。我要解决的问题如下:
让函数 ArrayChallenge(num) 获取传递的 num 参数并执行以下步骤。首先取输入数字的所有单个数字(始终是大于 1 的正整数)并将它们中的每一个添加到列表中。然后取输入数字并乘以它自己的任何一个整数,然后取这个新数字并将每个数字附加到原始列表中。继续此过程,直到列表中出现相邻的相同数字对。您的程序应该返回找到相邻重复数字对所需的最少乘法次数。
示例:如果 num 为 134,则首先将每个整数附加到一个列表中:[1, 3, 4]。现在,如果我们将 134 乘以 3(这是它自己的整数之一),我们得到 402。现在,如果我们将这些新整数中的每一个附加到列表中,我们得到: [1, 3, 4, 4, 0 , 2]。我们找到了一对相邻的重复数字,即 4 和 4。因此对于这个输入,您的程序应该返回 1,因为它只需要 1 次乘法就可以找到这对。
示例:如果 num 是 46,那么我们将这些整数附加到一个列表中:[4, 6]。如果我们将 46 乘以 6,我们得到 276,并将这些整数附加到我们现在拥有的列表中:[4,6,2,7,6]。然后,如果我们将这个新数字 276 乘以 2,我们得到 552。将这些整数附加到列表中,我们得到:[4, 6, 2, 7, 6, 5, 5, 2]。因此,您的程序应该返回 2,因为它需要 2 次乘法才能找到一对相邻的重复数字(在本例中为 5 和 5)。
【问题讨论】:
-
选择乘数的规则是什么?为什么
6在第一轮,为什么2在第二轮?如果必须进行第三轮,乘数会是多少? -
添加了更多说明@engineersmnky。
-
@spickerman 我不认为它给出了任何特定的顺序。该示例似乎只是显示了将一个数字乘以它自己的数字的最短路径。