一、题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 题目: 给一个正整数数列 nums,一个跳数 jump,及幸存数量 left。 运算过程为:从索引0的位置开始向后跳,中间跳过 J 个数字,命中索引为 J+1 的数字,该数被敲出,并从该点起跳,以此类推,直到幸存 left 个数为止,然后返回幸存数之和。
输入描述: 第一行输入正整数数列 第二行输入跳数 第三行输入幸存数量 例子: 1,2,3,4,5,6,7,8,9 4 3
输出描述: 输出幸存数之和 例子: 从1(索引为0)开始起跳,中间跳过 4 个数字,因此依次删除 6,2,8,5,4,7。剩余1,3,9,返回和为13
|
二、题解
Java实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| package org.stone.study.algo.ex202411;
import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors;
public class SumOfLeft { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[] arr = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); int jump = scanner.nextInt(); int left = scanner.nextInt();
int ans = sumLeft(arr, jump, left); System.out.println("ans:" + ans); }
public static int sumLeft(int[] arr, int jump, int left) { List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList());
int index = 0; while(list.size() > left) { index = (index + jump + 1) % list.size(); list.remove(index); System.out.println("del: " + list.get(index)); --index; }
System.out.println("list:" + list); return list.stream().mapToInt(Integer::intValue).sum(); } }
|
python 实现
def sumOfLeft(nums, jump, left):
temp = nums[:]
index = 0
while len(temp) > left:
index = (index + jump + 1) % len(temp)
del temp[index]
# 因为删除了一个元素,所以 index 要减 1
index -= 1
return sum(temp)
if __name__ == "__main__":
nums = list(map(int, input().split()))
jump = int(input())
left = int(input())
print(sumOfLeft(nums, jump, left))