终末地省武陵电池
已知
1.息壤电池一颗能用40s每秒发1600的电
2.基地自带一个10w的电容
3.物流出口2s一个
4.分流器和汇流器能整3种组合2/3、1/2、1/3
我们可以注意到一颗电池拢共也就6.4w的电而基地电容却有10w,所以如果只动一个所以完全不需要担心电容不够而停摆!(懒得算极限是多少了,反正如果期间亏电超6.4w你一个电池也补不回来肯定得炸)
这样的话验证稳定的计算就很简单
1.间隔时间=2*(1.5^X₁*2^X₂*3^X₃)
2.占空比=40/间隔时间
3.平均发电量=1600*占空比
4.确认下平均发电量是否大于用电量
至于怎么组合,人力穷尽或许是个办法。但用这个办法的疑似不像人类(人生苦短,但我选python~)
点击查看折叠代码块
from collections import deque
def find_shortest_path(start, target):
"""
使用BFS找到从start开始,通过*2、*3和一次性的*1.5操作,逼近target(小于target的最大值)的最短路径
Args:
start: 起始数字
target: 目标数字
Returns:
tuple: (最终数值, 操作序列)
"""
if start >= target:
return start, []
# BFS队列:(当前值, 操作路径, 到达该值的步数, 是否已使用*1.5)
queue = deque([(start, [], 0, False)]) # 第四个元素表示是否已经使用过*1.5
# visited字典:键为(数值, 是否使用过*1.5),值为到达该状态的最小步数
visited = {(start, False): 0}
best_result = start
best_path = []
while queue:
current_value, path, steps, used_1_5 = queue.popleft()
# 更新最佳结果(如果当前值小于target且比之前记录的大)
if current_value < target and current_value > best_result:
best_result = current_value
best_path = path[:]
# 如果当前值已经超过目标值,则不再继续扩展此路径
if current_value >= target:
continue
# 尝试三种操作:*2 和 *3(始终可用),*1.5(仅当未使用过时可用)
operations = ['*2', '*3']
if not used_1_5:
operations.append('*1.5')
for operation in operations:
if operation == '*2':
next_value = current_value * 2
next_used_1_5 = used_1_5
elif operation == '*3':
next_value = current_value * 3
next_used_1_5 = used_1_5
else: # operation == '*1.5'
next_value = current_value * 1.5
next_used_1_5 = True
# 如果结果接近整数,则取整
if abs(next_value - round(next_value)) < 1e-9:
next_value = round(next_value)
# 如果下一个值已经超过目标,则无需继续
if next_value > target:
continue
# 如果下一个状态未被访问过,或找到更短的路径,则加入队列
state_key = (int(next_value), next_used_1_5)
if state_key not in visited or visited[state_key] > steps + 1:
visited[state_key] = steps + 1
new_path = path + [operation]
queue.append((int(next_value), new_path, steps + 1, next_used_1_5))
return best_result, best_path
def main():
target_power = 190 #目标发电量
start_num = 2 #物流出口2s一个
target_num = 64000 / target_power #40s/target_num(得到占空比)*1600(低容武陵电池功率)
result, operations = find_shortest_path(start_num, target_num)
print(f"起始数字: {start_num}")
print(f"目标数字: {target_num}")
print(f"逼近得到的最大值: {result}")
print(f"达到该值的最小步数: {len(operations)}")
print(f"操作序列: {' -> '.join(operations)}")
# 显示逐步变化过程
print("\n逐步变化过程:")
current = start_num
print(f"目标数字: {target_power}")
print(f"初始值: {current}")
for i, op in enumerate(operations):
if op == '*2':
current *= 2
elif op == '*3':
current *= 3
else: # op == '*1.5'
current *= 1.5
# 如果结果接近整数,则取整
if abs(current - round(current)) < 1e-9:
current = round(current)
else:
current = int(current)
print(f"第{i+1}步 ({op}): {current}S")
print(f"\n最终结果: {1600*40/result}")
if __name__ == "__main__":
main()
排列方式如图:

PS.占地还可以压缩(上面挪下面并放弃*1/3和*2/3这俩方案)

浙公网安备 33010602011771号