如何将数字分成三个连续的部分,使第三部分是其他两部分的总和



我正在尝试编写一个python程序,以确定一个数字的数字是否可以划分为三个连续部分,从而使第三部分是其他两部分的总和。例如9999198可以被划分,因为99+99=198。总和将始终是最低有效数字。我无法接近,请帮忙。

我试图将其实现为将一个数字视为单个数字,就像上面的情况中的7一样。然后尝试创建三个数字加7的所有子集,然后使用这些子集来找到正确的一个。比如7=2,2,3,所以我的答案是99,99198。

我的问题是,我们如何才能有效地将这些数字拆分为3个数字的子集。

这是我的解决方案,它检查将给定数拆分为3部分的所有可能组合,并检查前两个分量的和是否等于第三个分量。

def correct_number(x):
str_nmbr = str(x)
for result_split in range(len(str_nmbr)-2):
part_3 = int(str_nmbr[-result_split-1:])
for components_split in range(len(str_nmbr)-2-result_split):
part_2 = int(str_nmbr[1+components_split: -result_split-1])
part_1 = int(str_nmbr[:components_split+1])
if part_1 + part_2 == part_3:
return True
return False
print(correct_number(9999198)) # True

正如作者所要求的,在给定编号"1234567"的情况下,以下是确定编号零件的视觉解释

1 2 3 4 5 6 7:

  • 第一个循环选择第二个分隔符
  • 1 2 3 4 5 6|7
  • 第二个循环选择第一个
  • 1 2|3 4 5 6|7
  • 1 2 3 |4 5 6 |7
  • 1 2 3 4 |5 6 |7
  • 1 2 3 4 5|6|7
  • 。然后我们将第二个第二个分隔符向后移动1步
  • 1 2 3 4 5 | 6 7
  • 我们继续移动第一个分离器
  • 1|2 3 4 5 |6 7
  • 1 2|3 4 5|6 7
  • 1 2 3|4 5|6 7

最新更新