题目

从标准输入读入一个长度为 n 的数组和一个非负整数 k,将数组元素循环向左移动 k 个位置后输出。

输入格式:第一行输入整数 n 和移位数 k;第二行输入 n 个整数。

输出格式:在一行中输出循环左移后的数组,元素以空格分隔,末尾换行。

数据范围与约定:1 ≤ n ≤ 1000,0 ≤ k ≤ 106。

思路与算法

1. 模运算化简
移动位数先取模 k %= n,避免冗余的整轮移位。

2. 切片拼接
Pythonic 方式:a[k:] + a[:k],简洁高效地完成循环移位重组。

完整程序

a = int(input())
n = int(input())

# 累加 Sn = a + aa + aaa + ...
total = 0
cur = 0
for _ in range(n):
    cur = cur * 10 + a
    total += cur

print(total)

运行示例

输入:

5 2
1 2 3 4 5

输出:

3 4 5 1 2

其它写法

下面每种写法都是完整程序,输入输出格式与正文一致,便于对照。

三次反转

程序:

#!/usr/bin/python3
# coding=utf-8

def rev(a, l, r):
    while l < r:
        a[l], a[r] = a[r], a[l]
        l += 1
        r -= 1

n, k = map(int, input().split())
a = list(map(int, input().split()))
k %= n
rev(a, 0, n - 1)
rev(a, 0, k - 1)
rev(a, k, n - 1)
print(" ".join(map(str, a)))

输入:

5 2
1 2 3 4 5

输出:

3 4 5 1 2