不能使用114514表示的最小正整数是多少?
109。
没有数学证明,因为看到这种题就想要写程序。
Python代码:
import itertools
def generate_exprs(nums, ops):
if len(nums) == 1:
yield nums[0]
if nums[0] != '0':
yield f"-{nums[0]}"
else:
for i in range(1, len(nums)):
for left in generate_exprs(nums[:i], ops):
for right in generate_exprs(nums[i:], ops):
for op in ops:
yield f"({left}{op}{right})"
def can_represent(target):
nums = ['1', '1', '4', '5', '1', '4']
ops = ['+', '-', '*', '/']
num_parts = []
for length in range(1, len(nums) + 1):
for split in itertools.combinations(range(1, len(nums)), length - 1):
num_parts = []
prev = 0
for i in split:
num_parts.append(''.join(nums[prev:i]))
prev = i
num_parts.append(''.join(nums[prev:]))
for expr in generate_exprs(num_parts, ops):
try:
if eval(expr) == target:
print(f"{target} -> {expr}")
return True
except ZeroDivisionError:
continue
except Exception as e:
print(f"Error evaluating {expr}: {e}")
continue
print(f"{target} is it.")
return False
n = 1
while can_represent(n):
n += 1
输出:
1 -> (11/((45-1)/4))
2 -> (11-(45/(1+4)))
3 -> ((11*(4-5))+14)
4 -> ((11+45)/14)
5 -> (1*(14+(5-14)))
6 -> (114/(5+14))
7 -> (1+(1-(4+(5-14))))
8 -> (1+(1+((4*5)-14)))
9 -> (((1-1)*4)-(5-14))
10 -> (1*(1+(45/(1+4))))
11 -> (1*(((1+4)*5)-14))
12 -> (1+(((1+4)*5)-14))
13 -> (1-(1-(4-(5-14))))
14 -> (((1-1)*45)+14)
15 -> ((114/(5+1))-4)
16 -> (11-(4+(5-14)))
17 -> (((1+14)/5)+14)
18 -> ((1+(1-4))*(5-14))
19 -> (((1-1)*4)+(5+14))
20 -> (11+(45/(1+4)))
21 -> (((11-4)*5)-14)
...
82 -> ((1+1)*(45-(1*4)))
83 -> (-1+(14+(5*14)))
84 -> (1*(14+(5*14)))
85 -> (1+(14+(5*14)))
86 -> ((1+1)*(-4+(51-4)))
87 -> (11+(4*(5+14)))
88 -> (((1+1)*(45+1))-4)
89 -> (((1+14)*5)+14)
90 -> (-114+(51*4))
91 -> ((11*4)+(51-4))
92 -> (((1+1)*(45-1))+4)
93 -> (((1+1)*45)-(1-4))
94 -> (114-(5*(1*4)))
95 -> (114-(5+14))
96 -> (1+((1+4)*(5+14)))
97 -> (1*(1+(4*((5+1)*4))))
98 -> (114-((5-1)*4))
99 -> ((11*4)+(51+4))
100 -> ((1+1)*(45+(1+4)))
101 -> (1*(1+(4*(5*(1+4)))))
102 -> ((11-45)*(1-4))
103 -> ((11*(4+5))+(1*4))
104 -> (((1+1)*45)+14)
105 -> (114+(5-14))
106 -> (114-(5-(1-4)))
107 -> (11+(4*((5+1)*4)))
108 -> ((11+(4*(5-1)))*4)
109 is it.
我有一个同学,非常非常迷恋做数学题。
一次我突发奇想,问了他一道题(和质数相关),和你格式差不多,都是类似“存不存在……的最小正整数?如果存在,是多少?”
然后他看了两眼,问我“你这里面质数是按顺序还是不按顺序的?”
我说按顺序。
他又看了看题,看了看我:
“这不是计算机题吗?”
2024.8.24 17:01 二编
主要更新:改了Python程序逻辑,加了把两个数字拼在一起;但问题中没有提到负数,所以并没有添加正数改负数的逻辑。
2024.8.24 18:27 三编
主要更新:改了改Python,加了负数。十分感谢 @比那名居天子 每次都能举出反例让我改代码。
2024.9.17 正好有109个赞同,好耶——