OD C卷 - 幸存数之和

文章介绍了一种算法,针对给定的正整数数列和起跳规则,通过动态规划的方法计算在敲出指定数量的数后剩余数的和。关键步骤包括确定起跳点并更新数组。
摘要由CSDN通过智能技术生成

幸存数之和(100)

  • 给一个正整数数列nums,从索引为0的位置开始向后跳,中间跳过了J个数字,命中索引为J+1的数字,该数被敲出,并从该点起跳,依次类推,直到幸存left个数为止,然后返回幸存数之和;
  • 0是第一个起跳点;
  • 起跳点和命中点之间间隔J个数字,已被敲出的数字不计入在内;
  • 跳到末尾时,从头开始;
  • 若起始时,left > len(nums) 则无需跳数处理;
    输入描述:
    输入正整数列表
    输入跳数J
    输入left幸存数
    输出描述:
    幸存数之和

示例1
输入:
1,2,3,4,5,6,7,8,9
4
3
输出:
13
说明:
依次删除6,2,8,5,4,7

思路:

  • 注意每个命中的数字被敲出后,需从前一个位置开始起跳,别被题意误解;

# 输入列表
nums = list(map(int, input().strip().split(",")))
# 输入jump
jump = int(input().strip())
# 输入幸存的个数
left = int(input().strip())


def solution(nums, jump, left):
    n = len(nums)
    if left >= n:
        result = sum(nums)
        print(result)
        return result
    else:
        start = 0
        while len(nums) > left:
            start = (start + jump + 1) % len(nums)
            nums.pop(start)
            start -= 1 # 一个数被敲出后,从前一个位置开始起跳
        result = sum(nums)
        print(result)
        return result

solution(nums, jump, left)

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值