终末地省武陵电池

已知

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这俩方案)

posted @ 2026-02-22 11:19  hai(。・∀・)ノ゙  阅读(37)  评论(0)    收藏  举报