在我正在做的程序中,我有一个名为a = [5, 6, 7]
的向量,我必须使用此列表中的整数将整数61
拆分为加法分区。所以一个例子就是
61 = 5 + 6 + 7 + 7 + 6 + 6 + 6 + 6 + 6 + 6
有很多方法可以解决这个问题。我必须以编程方式执行此操作。我发现的一种方法如下。我不知道这总是会给出结果。首先,我检查61是否可以被列表中的任何数字整除。如果是,那么我可以使用该数字来添加多次(即商)以获得61.在这种情况下,61是素数。所以这会失败。下一步是 取列表中的第一个数字(在我们的例子中为5)并从61中减去它并尝试查看答案是否可被列表中的任何成员整除。如果是,那么我们再次找到了添加的方法。在这种情况下,从61减去5得到56,它可以被7整除,我们的解决方案将是
61 = 5 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7
通过这种方式,我们继续列表,直到我们在减法后找到一些可被列表中的成员整除的答案。
现在给我的列表[5, 6, 7]
是这样的,即存在一个整数分区,使得我们可以使用该整数分区从添加中获得61。因此,我们不必担心是否存在解决方案。所以我的方法看起来很粗糙。我想知道是否有一种有效的方法可以做到这一点
使用组合学中的一些算法。所以我的最终答案应该是一份清单
整数分区中的数字。所以一个可能的答案是
[5, 6, 7, 7, 6, 6, 6, 6, 6, 6]
感谢
答案 0 :(得分:1)
61的通用根是7
接近61的7个中的多个将是8,因此减去61-7 * 8 =给出56,
同样,6个接近61的差距为7的差异将为9, 减去61-6 * 9 =给出54,然后结果%剩余两个从{5,7}得到满足应为零
获得中间总和并找到他们的通用根与位移相结合可以给出答案。
希望这会有所帮助。 !很高兴进一步帮助
答案 1 :(得分:0)
我想我在这里找到了一个粗略的逻辑。让我们说给定列表是[5, 6, 7]
,数字是61.我们需要找到加法列表,总数是61.一个这样的例子是
61 = 5 + 6 + 7 + 7 + 6 + 6 + 6 + 6 + 6 + 6
另一个是
61 = 5 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7
我们的工作是将右侧的数字作为列表。所以一种可能的解决方案是
[5, 6, 7, 7, 6, 6, 6, 6, 6, 6]
我的算法如下。首先从61中减去所有列表成员。所以61 - 5 - 6 - 7 = 43.所以我们从列表中得到前三个成员,分别是5,6,7。现在剩下的是43.要获得其他成员,我们减去每个5,6,7从43,一次一个,看看答案是否可以被5,6,7中的任何一个整除。所以
43 - 5 = 38 -> not divisible by any [5, 6, 7]
43 - 6 = 37 -> not divisible by any [5, 6, 7]
43 - 7 = 36 -> divisible by 6 in [5, 6, 7]
和商是6,这意味着我们必须使用6个中的6个和7个,我们从43中减去最后一个。所以列表将是原始列表加上7和a 长度为6的6个列表。所以我找到的一个可能的解决方案是
[5, 6, 7, 7, 6, 6, 6, 6, 6, 6]
我们可以验证总和是61.我用R
编程语言编写了一个程序。这是
get_me_list <- function(number, mylist){
rest <- number - sum(mylist)
flag = FALSE
for(i in seq_along(mylist)){
answer <- rest - mylist[i]
for(j in seq_along(mylist)) {
if( answer %% mylist[j] == 0){
repeat_factor <- answer / mylist[j]
number_to_repeat <- mylist[j]
pivot <- mylist[i]
flag = TRUE
break
}
}
if(flag){
break
}
}
final_list <- c(mylist, pivot, rep(number_to_repeat, repeat_factor))
final_list
}
所以get_me_list
函数需要两个输入。 number
和my_list
。就我而言number = 61
和my_list = [5, 6, 7]
。在R
中,向量写为
c(5, 6, 7)
或5:7
,如果它的序列从5到7.那么我得到的输出是
c(5, 6, 7, 7, 6, 6, 6, 6, 6, 6)
是R
中的向量。我尝试给出my_list
的各种值,并将解决方案与我用笔和纸计算的手动解决方案进行了比较。我正在通过上面的代码得到正确答案。我不知道这种方法是否总是有效。我当然假设只使用number
的成员可以得到等于my_list
的总和。
请评论代码。
感谢