算法题 | GESP | 小杨的储蓄

题源:洛谷

目录

题目

代码实现

测试结果


题目

代码实现

单层循环实现:
循环遍历天数D,作为待加和的值,将列表中的值视作下标存储对应的天数

# 读取输入数据
# 第一行输入两个整数:N(储蓄罐数量)和D(存钱天数)
N, D = map(int, input().split())
# 第二行输入D个整数,表示每天选择的储蓄罐编号(0到N-1)
a = list(map(int, input().split()))

# 初始化储蓄罐数组
# 创建一个长度为N的列表,初始值都为0,用于记录每个储蓄罐的总金额
savings = [0] * N

# 模拟存钱过程
# 遍历每一天(从1到D天)
for day in range(1, D + 1):
    # 获取当天选择的储蓄罐编号
    # 注意:day-1是因为列表索引从0开始,而天数从1开始
    jar = a[day - 1]
    
    # 将当天的金额(day元)存入对应的储蓄罐
    # 例如:第1天存1元,第2天存2元,...
    savings[jar] += day

# 输出结果
# 将savings列表中的数字转换为字符串,并用空格连接成一个字符串输出
print(' '.join(map(str, savings)))

双层循环实现:

已知存钱罐个数为N,遍历存钱罐[0,N-1],内层循环遍历输入的列表,内层判断如果是当前存钱罐(存钱罐的编号和输入的列表中数字一样),存入对应的钱(也就是天数D)

# 读取输入
N, D = map(int, input().split())  # N个储蓄罐,D天
a = list(map(int, input().split()))  # 每天选择的储蓄罐编号

# 初始化储蓄罐金额
savings = [0] * N

# 外层循环:遍历每个储蓄罐
for jar in range(N):
    # 内层循环:遍历每一天
    for day in range(1, D + 1):
        # 如果当天选择的是当前储蓄罐
        if a[day - 1] == jar:
            # 存入当天的金额
            savings[jar] += day

# 输出结果
print(' '.join(map(str, savings)))

测试结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值