笔试编程题汇总

本文介绍了一个基于指令操作的香槟塔模拟程序。该程序能够处理两类指令:一是向指定层倒入特定体积的香槟,二是查询某一层当前的香槟体积。通过逐层溢出的逻辑模拟香槟流动过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

"""
题目描述:香槟塔的视觉效果是,如果这一层满了,会自动往下一层流。现在牛牛听妞妞指令,
        一个指令是往第X层倒入体积为V的香槟,一个指令是询问第k层的香槟体积,请使用程序实现这两个指令
输入描述:第一行为两个整数n,m,表示香槟塔的总层数和指令条数
        第二行是n个整数ai,表示每层香槟的容量
        第三行到第2+m行表示指令,一种指令是"2 x v"表示往第x层倒入v,另一种是"1 k"表示询问第k层有多少香槟
输出描述:对于每个询问,输出一个整数表示第k层香槟的容量

样例:
    输入:
        1 2
        8
        2 1 9
        1 1
    输出:
        8

"""



import sys

def step_ask(V, command):
    idx_cur = command-1
    print(V[idx_cur])

def step_add(V, command, V_max):
    add_all = command[1]
    idx_cur = command[0]-1
    while True:
        if add_all<=0 or idx_cur>=len(V):
            break
        if add_all <= V_max[idx_cur]-V[idx_cur]:
            V[idx_cur] += add_all
            add_all = 0
        else:
            add = V_max[idx_cur]-V[idx_cur]
            V[idx_cur] = V_max[idx_cur]
            add_all -= add
            idx_cur += 1


def step(V, command, V_max):
    if len(command)==2:
        step_ask(V, command[1])
    else:
        step_add(V, command[1:3], V_max)

if __name__ == "__main__":
    # 读取第一行的n
    # n = int(sys.stdin.readline().strip())

    line0 = sys.stdin.readline().strip()
    layers_num, command_num = list(map(int, line0.split()))

    line1 = sys.stdin.readline().strip()
    init_V = list(map(int, line1.split()))

    V_max = init_V.copy()
    V_cur = [0]*len(V_max)
    for idx in range(command_num):
        line2 = sys.stdin.readline().strip()
        command = list(map(int, line2.split()))
        step(V_cur, command, V_max)


    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值