首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >难以找到表示整数所需的最小1数。

难以找到表示整数所需的最小1数。
EN

Stack Overflow用户
提问于 2022-08-19 08:44:54
回答 1查看 54关注 0票数 1

为了好玩,我做了一些编程上的挑战,我在一个关于如何仅用整数来表示整数的问题上陷入了困境。问题是,使用+、x和c操作来表示小于100000的整数所需的最小数目是多少,其中c是连接运算(12 12 34 = 1234)。这个值在问题定义中被称为复杂性C(n)。我的解决方案使用了一个备忘录数组,在这个数组中,我保留了我已经处理过的每个数字的复杂性。对于每一个新的整数,我从所有的因式分解、所有的级联和整数减1中取最小的复杂度来得到复杂度。例如,对于77的整数,我将复杂度赋值为min( C(7) + C(11 ),C(7) + C(7),C(76) + C(1) )。我对此的推理是,由于级联、分解和减法都会导致较小的整数,所以这些部分的复杂度总是最小的。

对于10101和99999这样的整数,这个解决方案得到了正确的答案,但由于某种原因,它只能停留在99984上。我找到的解决办法是:

(( 1) C(1)C_(1)x (1+1+1) x (1+1+1) )(1+1)C_1)x (1+1+1+1) = 99984

这里的复杂性变成C(99984) = 16,这显然是错误的。在这个问题上,我一直视而不见,很想知道我哪里出了错。下面是我的Python 3代码:

代码语言:javascript
复制
def find_complexity(input_number):
    complexity_array = [0]*(input_number+1)
    complexity_array[1] = 1
    largest_divisor = 2

    for number in range(2, input_number+1):
        smallest_complexity = number
        
        #Loop through all concatenation splits
        str_number = str(number)
        for i in range(len(str_number)-1):
            tail = str_number[i+1:]
            if tail[0] == '0':
                continue
            head = str_number[:i+1]
            complexity_sum = complexity_array[int(head)] + complexity_array[int(tail)]
            if smallest_complexity > complexity_sum:
                smallest_complexity = complexity_sum
                
        #Loop through all factorizations
        if number == largest_divisor**2:
            largest_divisor += 1
        for divisor in range(2, largest_divisor):
            if number % divisor != 0: 
                continue
            dividend = number // divisor
            complexity_sum = complexity_array[dividend] + complexity_array[divisor]
            if smallest_complexity > complexity_sum:
                smallest_complexity = complexity_sum
                
        #Loop through all summations
        complexity_sum = complexity_array[number-1] + 1
        if smallest_complexity > complexity_sum:
            smallest_complexity = complexity_sum
        
        complexity_array[number] = smallest_complexity
    
    return complexity_array[input_number]

input_number = 99984
output = find_complexity(input_number)
print(output)
EN

回答 1

Stack Overflow用户

发布于 2022-08-19 13:54:35

你忘了一些可能的手术。对于任何整数n,您可以通过kn-k之和达到它,对于任何1 <= k <= n-1

例如,考虑53。它可以编写为(1 © 1) + ((1 + 1) x ((1 + 1) © 1)),所以C(53) = 7,您的代码返回8。

注意,53是代码错误的第一个整数。

我认为您没有任何实现问题,所以我让您编写这个代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73414097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档